首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将列表中的数据修改为另一个数据

将列表中的数据修改为另一个数据
EN

Stack Overflow用户
提问于 2018-11-13 14:35:08
回答 2查看 135关注 0票数 4

我有这样的名字和列表的数据:

代码语言:javascript
运行
复制
| Name | value |
|:-----|------:|
| A    |[1,4,7]|
| A    |[9,2,5]|
| A    |[6,9,3]|
| A    |[1,4,7]|
| A    |[9,2,5]|
| B    |[6,9,3]|
| B    |[1,4,7]|
| B    |[9,2,5]|
| B    |[6,9,3]|
| B    |[1,4,7]|

我想把这个数据重新组合成另一个数据格式,因为所有的名字都会有3个这样的列表:

代码语言:javascript
运行
复制
| Name |   value   |
|:-----|----------:|
| A    |[1,9,6,1,9]|
| A    |[4,2,9,4,2]|
| A    |[7,5,3,7,5]|
| B    |[6,1,9,6,1]|
| B    |[9,4,2,9,4]|
| B    |[3,7,5,3,7]|

有什么更简单的方法可以用熊猫来做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-13 14:43:06

使用groupby+pd.Series+melt

代码语言:javascript
运行
复制
df2 = df.groupby('Name').apply(lambda s: pd.Series([s['value'].str[k].agg(list) for k 
in range(3)])).T.melt()

dataframe如下所示:

代码语言:javascript
运行
复制
   Name         value
0   A       [1, 9, 6, 1, 9]
1   A       [4, 2, 9, 4, 2]
2   A       [7, 5, 3, 7, 5]
3   B       [6, 1, 9, 6, 1]
4   B       [9, 4, 2, 9, 4]
5   B       [3, 7, 5, 3, 7]
票数 3
EN

Stack Overflow用户

发布于 2018-11-13 14:43:17

可以,但更好的方法是将列表分成不同的系列:

代码语言:javascript
运行
复制
res = pd.concat((pd.DataFrame(np.array(grp['value'].tolist()).T.reshape(3, -1))\
                 .assign(Name=key) for key, grp in df.groupby('Name')),
                ignore_index=True)

print(res)

   0  1  2  3  4 Name
0  1  9  6  1  9    A
1  4  2  9  4  2    A
2  7  5  3  7  5    A
3  6  1  9  6  1    B
4  9  4  2  9  4    B
5  3  7  5  3  7    B
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53283340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档