python:在csv中按唯一列合并重复项

5tmbdcev  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(354)

我的python代码有问题。我正在尝试合并数据框中的行。我有这样的想法:
代码\u idsize1234…18代码12345bigx…12345big.x…def67890中等…x…ghi67890中等…x…jkl13579小…x…xyz
我想按代码id合并重复项,但我想加入代码列中的字符串。就像这样:
代码12345bigxx……;DEF67890中等..xx….ghi;JKL13579小…x…xyz
我和阿格一起做的,但这只是工作的一部分。

g_df = df.groupby("CODE_ID")
group = g_df["CODE"].agg(lambda column: "; ".join(column))
group = group.reset_index(name="CODE")

因为结果是这样的:
代码\u idcode12345;def67890ghi;jkl13579xyz公司
如何添加其余列?或者也许这样做是错误的?

xa9qqrwz

xa9qqrwz1#

你可以转换 X s和 . s到1/0,然后 groupby 以及 max ,并将其Map回 X s和 . 学生:

(df
     .set_index(['CODE_ID', 'SIZE'])
     .filter(regex='\d+')              # numeric column names
     .replace({'X': 1, '.': 0})        # map to 1/0s
     .groupby(level=[0, 1])            # groupby code and size
     .max()                            # max
     .replace({1: 'X', 0: '.'})        # map back to X/.
).merge(                               # add ;-separated codes
    df.groupby(['CODE_ID', 'SIZE'])["CODE"].apply('; '.join),
    left_index=True,
    right_index=True,
)

输出:

CODE_ID    SIZE  1  2  3  4 18      CODE
0    12345     Big  X  X  .  .  .  abc; def
1    13579   Small  .  .  .  X  .       xyz
2    67890  Medium  .  .  X  X  .  ghi; jkl

相关问题