Pandas合并和分组不同的数据帧和创建新的列

2024-03-28 23:06:28 发布

您现在位置:Python中文网/ 问答频道 /正文

n 个数据帧,有nCity列。你知道吗

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()

谢谢你的帮助。你知道吗


Tags: 数据idcitydcdf1londonnyclima
1条回答
网友
1楼 · 发布于 2024-03-28 23:06:28

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']

相关问题 更多 >