python - 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。
解决方案
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
推荐阅读
- re2 - 如何匹配任何不包含 Re2 中特定单词的字符串
- jquery - 确定是按月付款还是按年付款
- powershell - 如何通过 Caml 克服 SharePoint Online 5000 行限制?
- angular - 以角度运行异步代码的语法
- javascript - 如何创建创建新网格项 onClick 的函数?Vuex 使用 vue-grid-layout
- javascript - Rxjs 可以将其更改为返回布尔值吗?
- python - 如果索引位置值在变量中定义,可以通过索引位置访问 Jinja 模板变量吗?
- c# - 如何在一个解决方案中添加多个名称空间和类
- python-3.x - 从特定键中具有最高值的字典列表中返回字典
- pandas - Pandas Merge:列标签不唯一