拥有 n
个n
个City
列数据的数据帧。
df1:
ID City City1 City2 .... CityN
444x Lima DC
222x Rica Dallas
555x Rio London
333x NYC Tokyo
777x SF Nairobi
df2:
ID City City1 City2 .... CityN
000x Lima Miami
888x Cct Texas
999x Delhi
444x Tokyo Ktm
333x Aus Paris
dfN:
ID City City1 City2 .... CityN
444x Lima DC
333x Rica Dallas
555x Rio London
666x NYC Tokyo
777x SF Nairobi
我尝试逐个合并数据帧,但City
列值会被最后一个数据帧值覆盖。
dfOutput=df1.merge(df2, how='left', on='ID')
我希望保留所有这些City1, City2, ...CityN
列值。我在下面列出了示例输出。
ID City1 City2 City3 City4 City5 City6
444x Tokyo Lima DC Miami Ktm
333x NYC Tokyo Aus Paris Rica Dallas
等剩下的IDs
。我也试过在SO中使用另一个问题提供的groupbyID
。
cities = df.groupby('ID')['City'].apply(lambda x: pd.Series([city for city in x])).unstack()
感谢您的帮助。
答案 0 :(得分:0)
IIUC您可以使用pd.merge
而不使用left
参数:
In [14]: df1
Out[14]:
ID City City1 City2
0 444x Lima - DC
1 222x Rica Dallas -
2 555x Rio London -
3 333x NYC Tokyo -
4 777x SF - Nairobi
In [15]: df2
Out[15]:
ID City City1 City2
0 000x Lima - Miami
1 888x Cct Texas -
2 999x Delhi - -
3 444x Tokyo Ktm -
4 333x Aus - Paris
In [16]: pd.merge(df1, df2, on='ID')
Out[16]:
ID City_x City1_x City2_x City_y City1_y City2_y
0 444x Lima - DC Tokyo Ktm -
1 333x NYC Tokyo - Aus - Paris
然后,您可以为结果数据框重命名列:
cols = ['ID'] + ['City' + str(i) for i in range(1, len(df3.columns))]
In [21]: cols
Out[21]: ['ID', 'City1', 'City2', 'City3', 'City4', 'City5', 'City6']