python - pandas:以特殊顺序合并两个数据框

标签 python pandas dataframe join merge

我检查了所有其他答案,但找不到我要找的内容。

我有一个数据框 df1:

0 A B
1 a good
2 b bad
3 c fair

和数据框df2:

0 C D
1 a a
2 a b
3 b c
4 a d

我想要的结果是:

0 C B1   D B2
1 a good a good
2 a good b bad
3 b bad  c fair
4 a good d ---

比如说,df1扮演了一个“字典”的角色,我需要提取A元素对应的B值。 注意,由于df1中没有定义元素d,因此df2中对应的值为“---”。

看起来很简单,但无法实现。 感谢您提供的所有提示。

最佳答案

使用s.map()

d=dict(zip(df1.A,df1.B))

df2['B1']=df2.C.map(d).fillna('---')
df2['B2']=df2.D.map(d).fillna('---')

df2=df2[['C','B1','D','B2']]

print(df2)


   C    B1  D    B2
0  a  good  a  good
1  a  good  b   bad
2  b   bad  c  fair
3  a  good  d   ---

如果 df2 中有更多列,则用于创建动态映射:

my_list=[]
for i in df2.columns:
    my_list.append(df2[i].map(d).fillna('---'))
df_new=df2.join(pd.concat(my_list,axis=1),lsuffix='',rsuffix='_mapped')
print(df_new)

   C  D C_mapped D_mapped
0  a  a     good     good
1  a  b     good      bad
2  b  c      bad     fair
3  a  d     good      ---

关于python - pandas:以特殊顺序合并两个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54304028/

相关文章:

python - pandas value_counts 包含 groupby 之前的所有值

python - 如何 "denormalize"数据框/从许多二进制列中创建一列

Java "Virtual Machine"与 Python "Interpreter"的说法?

python - 从 Flask 路由进行 Python 异步调用

python - 在 python 中检索 csv 数据文件时发生错误

python - 将函数应用于 Dask : How do you specify the grouped Dataframe as argument in the function? 中的分组数据帧

python - 是否有更好的矢量化解决方案来使用第二个数据帧中定义为变量的索引和列写入数据帧?

Python:按 Enter 键调用一段代码或函数

python - 调试器差异 : VSCode/Terminal (Python)

python - 以 (n) 天为单位的滚动最小值列