我有两个数据帧,dataframe1和dataframe2。两者在特定列中共享相同的数据,让我们分别为dataframe1和dataframe2将此列称为“ share1”和“ share2”。
问题是,在某些情况下,在dataframe1中,“ share1”中只有一行具有特定值(我们称其为“ c34z”),但是在dataframe2中有多行具有在其中的值“ c34z” “ share2”列。
我想做的是,在新的合并数据框中,当有新值时,我只想将它们放在新列中。
因此,新数据框中的列数将是'share2'中特定值的最大重复数。对于“ share2”中仅有唯一值的行,该行的其余添加列将为空白。
答案 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')
此后,我使用.loc
或reindex
concat
df2
到df1
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')