python - 对 DataFrame 中的所有列使用 groupby()

标签 python pandas pandas-groupby

我试图组合 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/

相关文章:

python - Pandas 向后填充增量 12 个月

python - 旋转后的图片看起来像缺少像素

python - 使用请求元从 scrapy 更新数据库表

python - 合并字符串列上的两个数据框 - 复合字符串列

python - 在 Pandas 中转置或旋转多列

python - 按组划分数据框的列?

python - 在运行时将数据帧与另一个数据帧合并

Python Pandas 求和日期和描述

python - 给定雅可比行列式时,Scipy 的 curve_fit/leastsq 会变慢吗?

python - 必应 AppID 无效