我有一个包含用户的数据帧,每个用户都有多个ID:
df_id = pd.DataFrame({'group': ['a','a','b','b','a','a','b','b','a','a','b','b'],
'id1': ['erd','hgf','ewr','fgv','nbg','axc','bcv','ijh','plh','wqe','mnf','iud'],
'id2': ['dfg','bcw','urz','fwq','nfg','dfo','hiy','fgl','vcw','erq','dfi','vcs']})
df_id
group id1 id2
0 a erd dfg
1 a hgf bcw
2 b ewr urz
3 b fgv fwq
4 a nbg nfg
5 a axc dfo
6 b bcv hiy
7 b ijh fgl
8 a plh vcw
9 a wqe erq
10 b mnf dfi
11 b iud vcs
2个包含部分用户ID的其他数据帧:
^{pr2}$我想根据id将所有3个合并在一起,但是,uidx
可以匹配id1
或{df_id
,所以我不能在一个列上联接。此外,df_id
包含的用户比其他两个数据帧中的任何一个都要多,所以我预计NaN
我能想到的唯一方法是遍历df_id
并检查id
列,并从其他数据帧手动添加值,但这非常慢。如果我要连接的值可能在id
列中,那么正确的合并/联接方式是什么?在
所需输出为:
group id1 id2 q_1 q_2
0 a erd dfg 1.0 NaN
1 a hgf bcw NaN NaN
2 b ewr urz 1.0 low
3 b fgv fwq NaN NaN
4 a nbg nfg 1.0 high
5 a axc dfo NaN low
6 b bcv hiy 0.0 NaN
7 b ijh fgl NaN high
8 a plh vcw NaN high
9 a wqe erq 0.0 NaN
10 b mnf dfi NaN NaN
11 b iud vcs NaN NaN
我的实际数据每个dataframe有数百个列,其中的列名变化很大,所以我寻找一种不需要单独/手动处理每个列的方法。换句话说,我正在寻找一种不需要手动指定列/数据帧名称的通用方法
一般情况下:
对df_2重复此操作,或提取一个函数并将其应用于df_2。也许使用
iloc
来避免使用列名。在这里有一个方法可以避免多次合并每个数据帧,方法是将原始数据帧的多个
id*
列堆叠成一个id
列,然后根据该列合并每个数据帧一次。我不能保证这会比更直接的方法更快地处理你的数据(但如果不是的话,请告诉我)。在结果如下:
^{pr2}$相关问题 更多 >
编程相关推荐