首页 > 解决方案 > 使用 python/pandas 组合值

问题描述

我是 python/pandas 用户,对此有疑问。我有一个如下的 Excel 文件。

   C1  C2  C3  C4     C5     C6  ID  Value
0  aa  ee  ii  mm  aaaaa   bbbb   1    100
1  bb  ff  jj  nn   cccc  ddddd   2     50
2  aa  ee  ii  mm   eeee   ffff   3     20
3  dd  hh  ll  pp   gggg   hhhh   4     10
4  aa  ee  ii  mm   abcd   efgh   5      5
5  bb  ff  jj  nn  aaaaa   bbbb   6      2

重现代码——</p>

df = pd.DataFrame({'Value': [100,50,20,10,5,2],
'ID': [1,2,3,4,5,6],
'C1': ['aa','bb','aa','dd','aa','bb'],
'C2': ['ee','ff','ee','hh','ee','ff'],
'C3': ['ii','jj','ii','ll','ii','jj'],
'C4': ['mm','nn','mm','pp','mm','nn'],
'C5': ['aaaaa','cccc','eeee','gggg','abcd','aaaaa'],
'C6': ['bbbb','ddddd','ffff','hhhh','efgh','bbbb']})

某些行在 column1-4 中是重复的(例如 ID1、ID3 和 ID5 或 ID2 和 ID6 是重复的)。有没有办法合并重复的行?(我关注第1-4列,不关心第5&6列)

我想组合重复行的“值”并保留顶列的序列。例如,这是我想要制作的输出文件。

    Value   ID  C1  C2  C3  C4  C5      C6
0   125     1   aa  ee  ii  mm  aaaaa   bbbb
1   52      2   bb  ff  jj  nn  cccc    ddddd
2   10      4   dd  hh  ll  pp  gggg    hhhh

如果您能给我您的意见,我将非常感激。

标签: pythonpandas

解决方案


可能还有其他有效的方法,一种方法可能是:

  • 创建new_df使其在Column1首次出现时保持唯一值。

  • 然后,在分组后原始df得到总和Column1并更新new_df

你可以试试如下图:

new_df = df.drop_duplicates(subset='Column1', keep='first').reset_index()
del new_df['index'] # remove extra index column after reset index
new_df['Value'] = df.groupby('Column1', as_index=False).sum()['Value']
print(new_df)

结果:

   ID  Value Column1 Column2 Column3 Column4 Column5 Column6
0   1    125      aa      ee      ii      mm   aaaaa    bbbb
1   2     52      bb      ff      jj      nn    cccc   ddddd
2   4     10      dd      hh      ll      pp    gggg    hhhh

更新:

编辑后检查数据框:

new_df = df.drop_duplicates(subset='C1', keep='first').reset_index()
del new_df['index']
new_df['Value'] = df.groupby('C1', as_index=False).sum()['Value']
print(new_df)

结果:

   C1  C2  C3  C4     C5     C6  ID  Value
0  aa  ee  ii  mm  aaaaa   bbbb   1    125
1  bb  ff  jj  nn   cccc  ddddd   2     52
2  dd  hh  ll  pp   gggg   hhhh   4     10

推荐阅读