我浏览了这里的论坛来寻找答案。我正在尝试根据 df1 中的条件填充 df2 列,并且仅当 df1 和 df2 代码匹配时,才用 df1 列 X 填充 df2 列 X。
例如:
If df1['Type'] == 'X' & df1['code1'] == df2['code1'] return df1['Num']
Elif df1['Type'] == 'Y' & df1['code2'] == df2['code2'] return df1['Num']
df1 = df1.reset_index(drop=True)
df2 = df2.reset_index(drop=True)
df2.loc[(df2['code1'].isin(df1['code1'])) & (df1['Type'] == "X"), 'Num'] = df1['Num']
df2.loc[(df2['code2'].isin(df1['code2'])) & (df1['Type'] == "Y"), 'Num'] = df1['Num']
您似乎正在尝试根据 df1 的某些条件填充 df2 中的“Num”列。您使用
.loc
根据条件更新 df2 中的值是正确的,但您的代码中存在一些问题。
&
运算符来组合条件。在 pandas 中,您应该使用 &
表示逐元素逻辑 AND
,使用 |
表示逐元素逻辑 OR
。.loc
按条件赋值时,应根据满足条件的行的索引从df1中选择对应的值。以下是修复代码的方法:
import pandas as pd
# Assuming df1 and df2 are your DataFrames
# Resetting index
df1 = df1.reset_index(drop=True)
df2 = df2.reset_index(drop=True)
# Condition 1: df1['Type'] == 'X' and df1['code1'] matches df2['code1']
mask1 = (df1['Type'] == 'X') & (df2['code1'].isin(df1['code1']))
df2.loc[mask1, 'Num'] = df1.loc[df1['code1'].isin(df2.loc[mask1, 'code1']), 'Num']
# Condition 2: df1['Type'] == 'Y' and df1['code2'] matches df2['code2']
mask2 = (df1['Type'] == 'Y') & (df2['code2'].isin(df1['code2']))
df2.loc[mask2, 'Num'] = df1.loc[df1['code2'].isin(df2.loc[mask2, 'code2']), 'Num']
在此代码中:
mask1
和 mask2
。.loc
来更新 df2 中条件为 True 的值。.loc
和条件为 True 的行索引从 df1 中选择相应的值。这应根据指定的条件填充 df2 中的“Num”列。确保根据您实际的 DataFrame 列名称调整列名称('code1'、'code2'、'Type'、'Num')。