我想合并2个数据帧:
DF1:
cik0 cik1 cik2
'MKTG, INC.' 0001019056 None None
1 800 FLOWERS COM INC 0001104659 0001437749 None
11 GOOD ENERGY INC 0000930413 None None
1347 CAPITAL CORP 0001144204 None None
1347 PROPERTY INSURANCE HOLDINGS, INC. 0001387131 None None
DF2:
cik Ticker
0 0001144204 AABB
1 0001019056 A
2 0001387131 AABC
3 0001437749 AA
4 0000930413 AAACU
预期结果:
cik0 cik1 cik2 ticker
'MKTG, INC.' 0001019056 None None A
1 800 FLOWERS COM INC 0001104659 0001437749 None AA
11 GOOD ENERGY INC 0000930413 None None AAACU
1347 CAPITAL CORP 0001144204 None None AABB
1347 PROPERTY INSURANCE HOLDINGS, INC. 0001387131 None None AABC
我想将cik0与df2 [‘cik’]相匹配,
如果它不起作用,我想看看cik1,依此类推.
谢谢你的帮助!
解决方法:
您可以使用pd.Series.map
和fillna
几次:
ticker_map = df2.set_index('cik')['Ticker']
df1['ticker'] = df1['cik0'].map(ticker_map)\
.fillna(df1['cik1'].map(ticker_map))\
.fillna(df1['cik2'].map(ticker_map))
def apply_map_on_cols(df, cols, mapper):
s = df[cols[0]].map(mapper)
for col in cols[1:]:
s = s.fillna(df[col].map(mapper))
return s
df1['ticker'] = df.pipe(apply_map_on_cols,
cols=[f'cik{i}' for i in range(3)],
mapper=df2.set_index('cik')['Ticker'])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。