我有一个包含5列的数据帧(df)。 我想对前3列使用'group by',并在第4列中列出列表中的值和列5的idem。 我的代码适用于第4列:
df_new=df.groupby(['1','2', '3'])['4'].apply(list)
但我不知道如何管理第5列。
df_new=df.groupby(['1','2', '3'])['4', '5'].apply(list)
不起作用。
答案 0 :(得分:0)
演示:
来源DF:
In [174]: df = pd.DataFrame(np.random.randint(3, size=(20,5)), columns=list('12345'))
In [175]: df
Out[175]:
1 2 3 4 5
0 2 1 2 0 0
1 2 0 2 2 0
2 0 2 2 2 2
3 0 2 2 1 2
4 0 2 1 2 1
5 1 1 2 1 2
6 0 2 1 0 1
7 2 2 0 1 1
8 0 0 2 2 1
9 1 0 2 0 0
10 2 0 1 0 1
11 0 1 2 1 2
12 2 0 1 0 1
13 2 0 0 2 0
14 1 1 1 1 0
15 2 2 2 0 0
16 0 1 1 2 2
17 2 1 1 0 0
18 1 0 0 0 1
19 2 2 2 1 2
解决方案:
In [176]: (df.groupby(['1','2', '3'])['4','5']
.apply(lambda x: pd.Series(x.values.T.tolist(), index=['4','5'])))
Out[176]:
4 5
1 2 3
0 0 2 [2] [1]
1 1 [2] [2]
2 [1] [2]
2 1 [2, 0] [1, 1]
2 [2, 1] [2, 2]
1 0 0 [0] [1]
2 [0] [0]
1 1 [1] [0]
2 [1] [2]
2 0 0 [2] [0]
1 [0, 0] [1, 1]
2 [2] [0]
1 1 [0] [0]
2 [0] [0]
2 0 [1] [1]
2 [0, 1] [0, 2]
答案 1 :(得分:0)
可以先创建一个额外的列,然后再执行操作。
import pandas as pd
df= pd.DataFrame(dict(A=[1,2,2],B=[1,2,2],C=[3,2,2],D=list("ABC"),E=list("DEF")))
df['list'] = df[['D','E']].values.tolist()
df = df.groupby(['A','B','C'])['list'].apply(list)
print(df.to_frame())
返回:
list
A B C
1 1 3 [[A, D]]
2 2 2 [[B, E], [C, F]]