为了账号安全,请及时绑定邮箱和手机立即绑定

如何聚合分类数据,其中唯一 ID 有多行,另一列的值不同?

如何聚合分类数据,其中唯一 ID 有多行,另一列的值不同?

慕斯王 2022-11-18 20:44:45
我需要将具有相同 ID 的数据聚合到一行中,但将不同的代码保存到不同的列中。我查看了这篇文章:How to pivot a dataframe,但这篇文章没有回答我的问题。例如:输入数据框可以是:d = {'id': ['a', 'a', 'a', 'b', 'b', 'b'], 'Code': ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']}df1 = pd.DataFrame(data=d)print(df1)   id  Code0   a    A11   a    A22   a    A33   b    B14   b    B25   b    B3但输出需要是这样的:d = {'id': ['a', 'b'], 'Code_1': ['A1', 'B1'], 'Code_2':['A2', 'B2'], 'Code_3':['A3', 'B3']}df2 = pd.DataFrame(data=d)print(df2)   id  Code_1  Code_2  Code_30   a    A1      A2      A31   b    B1      B2      B3我尝试了多种方法。最近的是我在另一个问题上找到的代码,它至少做了聚合部分df1.groupby('id')['Code'].apply(' '.join).reset_index()但这给出了一个输出,其中不同的代码作为一个长字符串保存到一列中,而不是保存到多列中。  id      Code0  a  A1 A2 A31  b  B1 B2 B3任何帮助都会很棒!
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您可以使用分隔符Series.str.split拆分分组数据框的列,并传递一个可选参数,该参数将拆分的字符串扩展为多个列,这将创建一个新的数据框。然后使用您可以将前缀添加到 dataframe 的列。最后使用你可以将和连接在一起。Codeexpand=Truedf_sadd_prefixCode_df_spd.concatdf_g["id"]df_s

利用:

df_g = df1.groupby('id')['Code'].apply(' '.join).reset_index()


df_s = df_g["Code"].str.split(' ', expand=True)

df_s.columns = df_s.columns + 1

df_s =  df_s.add_prefix("Code_")


result = pd.concat([df_g["id"], df_s], axis=1) 

print(result)

这打印:


 id Code_1 Code_2 Code_3

0  a     A1     A2     A3

1  b     B1     B2     B3


查看完整回答
反对 回复 2022-11-18
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信