我试图组合 DataFrame 中共享相同索引的所有行,以便将所有数据放入索引每一列的列表中。
例如:
dict = {'ID': ['alpha', 'alpha', 'bravo', 'bravo', 'charlie', 'charlie'], 'Var1': [1, 2, 3, 3, 5, 5], 'Var2': [10, 10, 12, 13, 10, 11]}
df = pd.DataFrame(dict)
df.set_index('ID')
Var1 Var2
ID
alpha 1 10
alpha 2 10
bravo 3 12
bravo 3 13
charlie 5 10
charlie 5 11
目标是获得:
Var1 Var2
ID
alpha [1, 2] [10, 10]
bravo [3, 3] [12, 13]
charlie [5, 5] [10, 11]
<小时/>
当我做我认为显而易见的事情时,它并没有按预期工作:
new_df = df.groupby('ID')[df.columns].apply(list)
print(new_df)
ID
alpha [Var1, Var2]
bravo [Var1, Var2]
charlie [Var1, Var2]
<小时/>
<小时/>
我能想到的唯一解决方案是迭代每一列并连接每个结果,如下所示:
new_df = pd.DataFrame()
for i in df.columns:
y = df.groupby('ID')[i].apply(list)
new_df = pd.concat([new_df, y], axis = 1)
print(new_df)
Var1 Var2
ID
alpha [1, 2] [10, 10]
bravo [3, 3] [12, 13]
charlie [5, 5] [10, 11]
这似乎超出了必要的范围,所以我想知道是否有更好的方法来执行该操作。
最佳答案
您应该使用agg
df.groupby('ID')['Var1','Var2'].agg(lambda x : x.values.tolist())
Out[576]:
Var1 Var2
ID
alpha [1, 2] [10, 10]
bravo [3, 3] [12, 13]
charlie [5, 5] [10, 11]
关于python - 对 DataFrame 中的所有列使用 groupby(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51826234/