按标识符对每列的行进行连接

1 投票
1 回答
47 浏览
提问于 2025-04-12 21:13

欢迎大家来帮忙。

我想把数据表中每个ID的多行合并成一个单元格,下面是输入格式:

这里输入图片描述

我在pandas中有以下列和数据表:

dict1 = {'ID': ['6610', '6610', '6610', '6620', '6620', '7540', '7540'],
 'NEW_ID': ['6615',
  '6615',
  '6615',
  '   ',
  '                                                                                    ',
  nan,
  nan],
 'OLD_PRICE': [17.22, 17.9, 17.22, 27.49, 20.42, 30.73, 29.55],
 'NEW_PRICE': [17.22, 17.22, 27.49, 18.99, 27.49, 29.55, 27.49],
 'LABEL': ['  NaN1', '  NaN2', '  NaN4', nan, '  Na', 'A', 'B']}

df = pd.DataFrame(dict1)

期望的输出结果:

这里输入图片描述

1 个回答

1

你可以通过 pd.Series.duplicated 来查找 ID 列中的重复项,并用空值 '' 来替换这些重复项:

mask = df["ID"].duplicated(keep="first")

df.loc[mask, "ID"] = ""
df["NEW_ID"] = df["NEW_ID"].fillna("")

print(df)

输出结果是:

     ID NEW_ID  OLD_PRICE  NEW_PRICE   LABEL
0  6610   6615      17.22      17.22    NaN1
1         6615      17.90      17.22    NaN2
2         6615      17.22      27.49    NaN4
3  6620             27.49      18.99     NaN
4                   20.42      27.49      Na
5  7540             30.73      29.55       A
6                   29.55      27.49       B

注意:如果你需要去掉数据框中元素的空格,可以使用以下代码:

df = df.applymap(lambda elem: elem.strip() if isinstance(elem, str) else elem)

撰写回答