熊猫:基于列值合并2个数据框;对于包含相同列值的多行,请将其追加到不同的列

时间:2019-04-21 01:02:16

标签: python pandas

我有两个数据帧,dataframe1和dataframe2。两者在特定列中共享相同的数据,让我们分别为dataframe1和dataframe2将此列称为“ share1”和“ share2”。

问题是,在某些情况下,在dataframe1中,“ share1”中只有一行具有特定值(我们称其为“ c34z”),但是在dataframe2中有多行具有在其中的值“ c34z” “ share2”列。

我想做的是,在新的合并数据框中,当有新值时,我只想将它们放在新列中。

因此,新数据框中的列数将是'share2'中特定值的最大重复数。对于“ share2”中仅有唯一值的行,该行的其余添加列将为空白。

2 个答案:

答案 0 :(得分:1)

您可以使用cumcount创建附加密钥,然后pivot df2

newdf2=df2.assign(key=df2.groupby('share2').cumcount(),v=df2.share2).pivot_table(index='share2',columns='key',values='v',aggfunc='first')

此后,我使用.locreindex concat df2df1

df2=df2.reindex(df1.share1)

df2.index=df1.index
yourdf=pd.concat([df1,df2],axis=1)

答案 1 :(得分:1)

加载数据:

import pandas as pd
df1 = {'key': ['c34z', 'c34z_2'], 'value': ['x', 'y']}
df2 = {'key': ['c34z', 'c34z_2', 'c34z_2'], 'value': ['c34z_value', 'c34z_2_value', 'c34z_2_value']}
df1 = pd.DataFrame(df1)
df2 = pd.DataFrame(df2)

通过分组和旋转来转换df2

df2_pivot = df2.groupby('key')['value'].apply(lambda df: df.reset_index(drop=True)).unstack().reset_index()

合并df1和df2_pivot

df_merged = pd.merge(df1, df2_pivot, on='key')