根据2个其他列(pandas)

时间:2018-03-27 00:41:18

标签: python pandas

我正在尝试在熊猫中执行以下操作: 我有2个DataFrame,它们都有很多列。 DataFrame 1有一个A列,对我的任务很感兴趣; DataFrame 2包含感兴趣的B列和C列。

需要做什么:遍历A列中的值并查看列B中某处是否存在相同的值。如果是,请在Dataframe 1中创建一个D列并使用C中的值填充其各自的单元格与B中找到的值位于同一行 如果A中的值不存在于B中,则用D填充D中的单元格。

for i in range(len(df1)):
    if df1['A'].iloc[i] in df2.B.values:
        df1['D'].iloc[i] = df2['C'].iloc[i]
    else:
        df1['D'].iloc[i] = 0

这给了我一个错误:关键字' D'。如果我事先创建了列D并填充了它,例如,使用0' s,则会收到以下警告:尝试在DataFrame的切片副本上设置值。我怎么解决这个问题?或者有更好的方法来完成我想要做的事情吗?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

如果我理解正确:

鉴于这两个数据帧:

import pandas as pd
import numpy as np

np.random.seed(42)

df1=pd.DataFrame({'A':np.random.choice(list('abce'), 10)})
df2=pd.DataFrame({'B':list('abcd'), 'C':np.random.randn(4)})

>>> df1
   A
0  c
1  e
2  a
3  c
4  c
5  e
6  a
7  a
8  c
9  b

>>> df2
   B         C
0  a  0.279041
1  b  1.010515
2  c -0.580878
3  d -0.525170

您可以使用合并来实现您想要的目标:

new_df = df1.merge(df2, left_on='A', right_on='B', how='left').fillna(0)[['A','C']]

然后只需重命名列:

new_df.columns=['A', 'D']

>>> new_df
   A         D
0  c -0.580878
1  e  0.000000
2  a  0.279041
3  c -0.580878
4  c -0.580878
5  e  0.000000
6  a  0.279041
7  a  0.279041
8  c -0.580878
9  b  1.010515