找到一列的重复行,然后添加其他列的对应行

我想检查一列的重复行并添加其他列的相应行。如果日期框架如下:


 A     B         C         D  E  F  G  

13348  xyzqr     324580    1  1  1  1

13348  grpret    325810    4  4  4  4

45832  gberthh   258729    2  1  3  4

45832  bhdrffe   025892    2  1  1  4

58712  bgrtw     984562    2  2  2  2

76493  hzrt      638495    1  1  1  2

643509 .         T648501   1  1  1  1

643509 .         R648501   1  1  1  1

之后,添加列(B、C、D、E、F)的对应行必须检查对应行的所有列是否相等。如果相等,则为其他列提供相同的数字,否则为“0”。

对于上面的示例,由于 13348 有两个重复行,并且相应行的添加为 (D=5, E=5, F=5, G=5) 的每一列提供了 5,因此输出应为 5。而, 因为 45832 相加后有不同的列 (D=4, E=2, F=4, G=8) 值,所以输出应该是 0。

剩余的列应该是重复行的最小索引值。


输出应如下所示:


   A     B       C       D 

  13348  xyzqr   324580  5

  45832  gberthh 258729  0

  58712  bgrtw   984562  2

  76493  hzrt    638495  0

  643509 .       T648501 2

我很高兴知道一些建议。


ABOUTYOU
浏览 127回答 1
1回答

MM们

我认为需要:cols = ['D','E','F','G']#for each group transpose df and check if all duplicatesdf1 = df.groupby('A')[cols].apply(lambda x: x.T.duplicated(keep=False))#for duplicates aggregate sum else 0arr = np.where(df1.all(axis=1), df.groupby('A')[cols[0]].sum(), 0)#remove unnecessary columns and add new, get first rows per column Adf = df.drop(cols, axis=1).drop_duplicates('A').assign(D=arr)print (df)        A        B        C  D0   13348    xyzqr   324580  52   45832  gberthh   258729  04   58712    bgrtw   984562  25   76493     hzrt   638495  06  643509        .  T648501  2如果所有值都是重复的,则检查每个组的替代解决方案:cols = ['D','E','F','G']m = df.groupby('A')[cols].apply(lambda x: x.T.duplicated(keep=False).all())print (m)A13348     True45832    Falsedtype: boolarr = np.where(m, df.groupby('A')[cols[0]].sum(), 0)df = df.drop(cols, axis=1).drop_duplicates('A').assign(D=arr)print (df)        A        B        C  D0   13348    xyzqr   324580  52   45832  gberthh   258729  04   58712    bgrtw   984562  25   76493     hzrt   638495  06  643509        .  T648501  2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python