我正在尝试在熊猫中执行以下操作: 我有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的切片副本上设置值。我怎么解决这个问题?或者有更好的方法来完成我想要做的事情吗?
非常感谢你的帮助!
答案 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