在熊猫中分组,转置和附加?
Posted
技术标签:
【中文标题】在熊猫中分组,转置和附加?【英文标题】:Groupby, transpose and append in Pandas? 【发布时间】:2016-11-17 02:07:50 【问题描述】:我有一个如下所示的数据框:
每个用户有 10 条记录。现在,我想创建一个如下所示的数据框:
userid name1 name2 ... name10
这意味着我需要将name
列的每 10 条记录反转并附加到一个新的数据帧。
那么,它是如何做到的呢?有什么办法可以在 Pandas 中做到这一点?
【问题讨论】:
【参考方案1】:groupby('userid')
然后reset_index
在每个组内以一致地枚举组。然后unstack
获取列。
df.groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack()
演示
df = pd.DataFrame([
[123, 'abc'],
[123, 'abc'],
[456, 'def'],
[123, 'abc'],
[123, 'abc'],
[456, 'def'],
[456, 'def'],
[456, 'def'],
], columns=['userid', 'name'])
df.sort_values('userid').groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack()
如果您不想将userid
作为索引,请将reset_index
添加到末尾。
df.sort_values('userid').groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack().reset_index()
【讨论】:
您先生,是我的英雄。也感谢您的解释:) 可能包含如何折叠多余的userid
行?我隐约记得有办法做到这一点。 (不记得很遗憾:()【参考方案2】:
您可能也对pandas.DataFrame.pivot感兴趣
查看此示例数据框:
df
userid name values
0 123 A 1
1 123 B 2
2 123 C 3
3 456 A 4
4 456 B 5
5 456 C 6
使用 df.pivot
df.pivot(index='userid', columns='name', values='values')
name A B C
userid
123 1 2 3
456 4 5 6
【讨论】:
以上是关于在熊猫中分组,转置和附加?的主要内容,如果未能解决你的问题,请参考以下文章