【发布时间】:2022-01-01 19:12:45
【问题描述】:
data = pd.DataFrame({'id':[1, 2 , 3],
'question': ['first country visited?', 'first city visited?' , 'two cities we love?'],
'answer1': ['UK', 'Paris', 'CA'],
'answer2': ['US', 0.4, 'Paris'],
'answer3': ['CA', 'London', 'London'],
'correct': [['UK'], [0.4], ['London, Paris, 0.4']]
})
数据:
id question answer1 answer2 answer3 correct
0 1 first country visited? UK US CA [UK]
1 2 first city visited? Paris 0.4 London [0.4]
2 3 two cities we love? CA Paris London [London, Paris, 0.4]
我正在创建一个新列来检查是否在 answer1 或 answer2 或 answer3 列中找到正确列中的值。
cols = data.filter(like='answer').columns
data['correct_column'] = data[cols].apply(lambda s: ','.join((m:=s.isin(data.loc[s.name, 'correct']))[m].index), axis=1)
输出:
id question answer1 answer2 answer3 correct correct_column
0 1 first country visited? UK US CA [UK] answer1
1 2 first city visited? Paris 0.4 London [0.4 answer2
2 3 two cities we love? CA Paris London [London, Paris, 0.4]
我在第三行得到一个空值。我已经尝试了几个小时,但我的原始数据没有成功!有没有更好的方法来实现这一目标?考虑我原始 df 中的不同数据类型,例如 floats、int & Str ..
【问题讨论】:
-
是的,它适用于我的示例,但我在数据类型和掩码逻辑方面遇到了更多问题,因此我正在寻找不同的方法
标签: python python-3.x pandas dataframe numpy