Python:按 CSV 中的唯一列合并重复项

Python: merge duplicates by unique column in CSV

我的 python 代码有问题。我正在尝试合并数据框中的行。我有这样的东西:

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

我想按 CODE_ID 合并重复项,但我想加入 CODE 列中的字符串。就这样:

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

我是用 agg 做的,但这只是工作的一部分。

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

因为结果是这样的:

CODE_ID CODE
12345 abc; def
67890 ghi; jkl
13579 xyz

如何添加其余的列?或者这样做的方法不对?

您可以将 Xs 和 .s 转换为 1/0,然后 groupbymax,并将其映射回 Xs和 .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