前几天我用两列数据问了一个类似的问题:
Grouping columns by unique values in Python
现在我有三列。它们需要按列A分组,列B作为标题值,列C排序正确。
我的数据框架如下:
A B C
25115 20 45
25115 30 154
25115 40 87
25115 70 21
25115 90 74
26200 10 48
26200 20 414
26200 40 21
26200 50 288
26200 80 174
26200 90 54
但我需要最终得到这个:
10 20 30 40 50 70 80 90
25115 45 154 87 21 74
26200 48 414 21 288 174 54
这将获取列C的值,但不会将列B作为行名称。
import pandas as pd
df = pd.DataFrame({'A':[25115,25115,25115,25115,25115,26200,26200,26200,26200,26200,26200],'B':[20,30,40,70,90,10,20,40,50,80,90],'C':[45,154,87,21,74,48,414,21,288,174,54]})
a = df.groupby('A')['C'].apply(lambda x:' '.join(x.astype(str)))
任何想法都会受到最高的赞赏。
答案 0 :(得分:4)
使用pivot_table:
df.pivot_table(values='C',index='A',columns='B')
输出
B 10 20 30 40 50 70 80 90
A
25115 NaN 45.0 154.0 87.0 NaN 21.0 NaN 74.0
26200 48.0 414.0 NaN 21.0 288.0 NaN 174.0 54.0
使用set_index / unstack:
df.set_index(['A','B'])['C'].unstack()
输出:
B 10 20 30 40 50 70 80 90
A
25115 NaN 45.0 154.0 87.0 NaN 21.0 NaN 74.0
26200 48.0 414.0 NaN 21.0 288.0 NaN 174.0 54.0