我有以下df,并且我希望合并具有相同ID的行,除非有重复

Ids      A   B   C   D   E  F   G    H   I  J
4411    24  2   55  26  1
4411                        24  2   54  26  0
4412    22  4   54  26  0
4412                        18  8   54  26  0
7401    12  14  54  26  0
7401                        0   25  53  26  0
7402    24  2   54  26  0
7402                        25  1   54  26  0
10891   16  10  54  26  0
10891                       3   23  54  26  0
10891                       5   10  6   15  0


输出示例

Ids      A   B   C   D   E  F   G    H   I  J
4411    24  2   55  26  1   24  2   54  26  0
4412    22  4   54  26  0   18  8   54  26  0
7401    12  14  54  26  0   0   25  53  26  0
7402    24  2   54  26  0   25  1   54  26  0
10891   16  10  54  26  0   3   23  54  26  0
10891                       5   10  6   15  0


我尝试了groupby,但是当您写入csv时会抛出错误。

最佳答案

此解决方案使用Divakar的justify函数。如果需要,请提前转换为数字:

df = df.apply(pd.to_numeric, errors='coerce', axis=1)


现在,呼叫groupby + transform

df.set_index('Ids')\
  .groupby(level=0)\
  .transform(
      justify, invalid_val=np.nan, axis=0, side='up'
  )\
  .dropna(how='all')

          A     B     C     D    E     F     G     H     I    J
Ids
4411   24.0   2.0  55.0  26.0  1.0  24.0   2.0  54.0  26.0  0.0
4412   22.0   4.0  54.0  26.0  0.0  18.0   8.0  54.0  26.0  0.0
7401   12.0  14.0  54.0  26.0  0.0   0.0  25.0  53.0  26.0  0.0
7402   24.0   2.0  54.0  26.0  0.0  25.0   1.0  54.0  26.0  0.0
10891  16.0  10.0  54.0  26.0  0.0   3.0  23.0  54.0  26.0  0.0
10891   NaN   NaN   NaN   NaN  NaN   5.0  10.0   6.0  15.0  0.0

08-24 16:13