首页 > 解决方案 > pandas 合并两个没有交叉引用的数据框,并且使用 NaN 来合并行数奇数

问题描述

19 年 3 月 5 日编辑:

尝试了不同的方法来合并和/或加入下面的数据,但我无法理解如何正确地做到这一点。

最初我有这样的数据:

index  unique_id  group_name  id  name
0      100        ABC         20  aaa
1      100        ABC         21  bbb
2      100        DEF         22  ccc
3      100        DEF         23  ddd
4      100        DEF         24  eee
5      100        DEF         25  fff
6      101        ABC         30  ggg
7      101        ABC         31  hhh
8      101        ABC         32  iii
9      101        DEF         33  jjj

目标是通过合并来重塑它,unique_id使结果如下所示:

index  unique_id  group_name_x  id_x   name_x  group_name_y  id_y  name_y
0      100        ABC           20     aaa     DEF           22    ccc
1      100        ABC           21     bbb     DEF           23    ddd
2      100        NaN           NaN    NaN     DEF           24    eee
3      100        NaN           NaN    NaN     DEF           25    fff
4      101        ABC           30     ggg     DEF           33    jjj
5      101        ABC           31     hhh     NaN           NaN   NaN
6      101        ABC           32     iii     NaN           NaN   NaN

我怎样才能在熊猫中做到这一点?how='outer', on='unique_id'我能想到的最好的方法是按组名(ABC 和DEF )将数据拆分为两个数据框,然后将它们与.

pd.concat答案中axis=1提到的不会对齐数据unique_id,也不会创建任何 NaN。

标签: pythonpandas

解决方案


concat如您所说,在重置两个索引后,将数据帧然后逐行拆分

一个工作代码,

df=pd.read_clipboard()
req_cols=['group_name','id','name']
df_1=df[df['group_name']=='ABC'].reset_index(drop=True)
df_2=df[df['group_name']=='DEF'].reset_index(drop=True)
df_1=df_1.rename(columns = dict(zip(df_1[req_cols].columns.values, df_1[req_cols].add_suffix('_x'))))
df_2=df_2.rename(columns = dict(zip(df_2[req_cols].columns.values, df_2[req_cols].add_suffix('_y'))))
req_cols_x=[val+'_x'for val in req_cols]
print (pd.concat([df_2,df_1[req_cols_x]],axis=1))

输出/输出:

   index  unique_id group_name_y  id_y name_y group_name_x  id_x name_x
0      2        100          DEF    22    ccc          ABC  20.0    aaa
1      3        100          DEF    23    ddd          ABC  21.0    bbb
2      4        100          DEF    24    eee          NaN   NaN    NaN
3      5        100          DEF    25    fff          NaN   NaN    NaN

推荐阅读