Daw*_*y33 11 group-by python-3.x pandas pandas-groupby
我有一个如下所示的数据框:
每个用户有10条记录.现在,我想创建一个如下所示的数据框:
userid  name1  name2  ... name10
这意味着我需要反转列的每10个记录name并附加到新的数据帧.
那么,它是如何做到的呢?我有什么方法可以在熊猫中做到吗?
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()
您可能还对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
| 归档时间: | 
 | 
| 查看次数: | 4539 次 | 
| 最近记录: |