python - 基于多条件检查将值放在另一个数据框中的 pandas 数据框中的列中

标签 python pandas dataframe

我有两个数据帧 df1df2。我想在 df1 中放置一列 new_id,其值来自 df2

s = {'id': [4735,46,2345,8768,807,7896],
     'st': ['a', 'a', 'd', 'e', 'f', 'a'], 
     'rd' : ['CU', 'SU', 'NU', 'NU', 'W', 'CU'], 
     'cm' : ['m', 'm', 'm', 'm', 'm','m']}
df1 = pd.DataFrame(s)

df1

     id st  rd cm
0  4735  a  CU  m
1    46  a  SU  m
2  2345  d  NU  m
3  8768  e  NU  m
4   807  f   W  m
5  7896  a  CU  m


s2 = {'id': [1234,4567,1357,2367,8765, 8796, 5687, 4565, 7865],
     'st': ['a', 'a', 'd', 'd', 'f', 'f','e' ,'e','a'], 
     'rd' : ['CU', 'SU', 'NU', 'W', 'W','NU','W','CU','W'], 
     'cm' : ['s', 's', 's', 's', 's','s','s','s','s']}
df2 = pd.DataFrame(s2)

df2

     id st  rd cm
0  1234  a  CU  s
1  4567  a  SU  s
2  1357  d  NU  s
3  2367  d   W  s
4  8765  f   W  s
5  8796  f  NU  s
6  5687  e   W  s
7  4565  e  CU  s
8  7865  a   W  s

我希望将 new_id 中的值从 df2id 列放入 df1,其中 st 值应该相同,rd 值应该不同。

并且一旦从 df2 中选取了一个值,就不应再次使用该值。我怎样才能在 Pandas 中做到这一点

我期待的结果:

     id st  rd cm  new_id
0  4735  a  CU  m  4567
1    46  a  SU  m  1234
2  2345  d  NU  m  2367
3  8768  e  NU  m  5687
4   807  f   W  m  8796
5  7896  a  CU  m  7865

最佳答案

使用 np.equal.outer 比较来获取此跨数据帧匹配,并使用 np.argmax 来检索索引。

comp = np.equal.outer(df1.st, df2.st) & ~np.equal.outer(df1.rd, df2.rd)
df1['new_id'] = df2.id[np.argmax(comp, axis=1)].tolist()

    id      st  rd  cm  new_id
0   4735    a   CU  m   4567
1   46      a   SU  m   1234
2   2345    d   NU  m   2367
3   8768    e   NU  m   5687
4   807     f   W   m   8796

关于python - 基于多条件检查将值放在另一个数据框中的 pandas 数据框中的列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54651693/

相关文章:

Python openpyxl 模块说 : AttributeError: 'tuple' object has no attribute 'upper'

python - 叠加图像并在每个像素位置显示较亮的像素

r - 根据dataframe2的列更新dataframe1的列+如果column1不为空则创建新行

python - 计算每组的滚动总和

python - 索引错误: indices are out-of-bounds when accessing pandas.数据帧

python - 网页抓取 : scrape multiple webs by Python

python - 如何在python中逐列对两个矩阵进行线性卷积

python-3.x - 使用循环创建多个数据框

pandas - 如何将 pandas 交叉表的输出数据框从两个系列 x 和 y 展平为一个系列?

python - 使用键作为新列从字典创建数据框?