提前感谢您的阅读。在
我有一个数据帧:
df = pd.DataFrame({'Words':[{'Sec': ['level']},{'Sec': ['levels']},{'Sec': ['level']},{'Und': ['ba ']},{'Pro': ['conf'],'ProAbb': ['cth']}],'Conflict':[None,None,None,None,'Match Conflict']})
Conflict Words
0 None {u'Sec': [u'level']}
1 None {u'Sec': [u'levels']}
2 None {u'Sec': [u'level']}
3 None {u'Und': [u'ba ']}
4 Match Conflict {u'ProAbb': [u'cth'], u'Pro': [u'conf']}
我想应用一个例程,它对'Words'
中的每个元素检查Conflict = 'Match Conflict'
如果是,则对'Words'
中的值应用一些函数。在
例如,使用以下占位符函数:
^{pr2}$我写道:
df['Words'] = df[df['Conflict'] == 'Match Conflict']['Words'].apply(lambda x: func(x))
我的预期产出是:
Conflict Words
0 None {u'Sec': [u'level']}
1 None {u'Sec': [u'levels']}
2 None {u'Sec': [u'level']}
3 None {u'Und': [u'ba ']}
4 Match Conflict None
相反,我得到:
Conflict Words
0 None NaN
1 None NaN
2 None NaN
3 None NaN
4 Match Conflict None
该函数仅应用于具有Conflict = 'Match Conflict'
的行,但以其他行为代价(这些行都变成None
)。我以为其他几行都不会动;显然情况并非如此。在
你能解释一下我如何在不删除Words
列中的所有信息的情况下实现我想要的输出吗?我相信答案可能在于np.where
,但我没能做到这一点,这是我能想到的最好的办法。在
非常感谢你的帮助。谢谢。在
您还可以使用
where
,如您所述您应该重写函数以处理所有行:
您可以尝试使用
.loc
仅更新与条件匹配的行:相关问题 更多 >
编程相关推荐