我的数据框有一个多重索引,最多有7列C1至C7,但这里只显示了C1和C2。在Correct_Category列下,它包含用于获取值的列的名称,并且还包含NaN
index1 index2 C1 C2 Correct_Category Matched
m1 a 10 0 C1 True
b 20 5 C2 True
c 10 10 C1 True
m2 d 1 15 C2 True
e 18 10 NaN False
我的目标是添加一列“匹配”,它根据Correct_Category中的列名给出值。
index1 index2 C1 C2 Correct_Category Matched Number
m1 a 10 0 C1 True 10
b 20 5 C2 True 5
c 10 10 C1 True 10
m2 d 1 15 C2 True 15
e 18 10 NaN False 0
到目前为止,我尝试使用.loc,.where,.apply,.query进行的所有操作均返回了不同的错误。
我当前的代码行:
df['Number']= df['Matched'].apply(lambda x: df[df['Correct_Category'] if x==True else 'No Category')
我要在df [df ['Correct_Category']插入可以找到正确值的代码,但这是不断返回不同错误的关键部分。
当前错误是“ ValueError:无法使用包含NA / NaN值的向量进行索引”
答案 0 :(得分:0)
使用DataFrame.lookup
,但仅用于过滤的行:
mask = df['Correct_Category'].isin(df.columns)
#alternative 1
#mask = df['Correct_Category'].notna()
#alternative 2
#mask = df['Matched']
df.loc[mask, 'Number'] = df.loc[mask].lookup(df.index[mask], df.loc[mask, 'Correct_Category'])
print (df)
C1 C2 Correct_Category Matched Number
index1 index2
m1 a 10 0 C1 True 10.0
b 20 5 C2 True 5.0
c 10 10 C1 True 10.0
m2 d 1 15 C2 True 15.0
e 18 10 NaN False NaN