gpt4 book ai didi

python - 如何根据另一列中的值将函数应用于 Pandas 中的列?

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:37 25 4
gpt4 key购买 nike

提前感谢您的阅读。

我有一个数据框:

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' 中的值。

例如,使用以下占位符函数:

def func(x):
x = x.clear()
return x

我写:

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 但我无法完成这项工作,这是我能想到的最好的办法。

非常感谢任何帮助。谢谢。

最佳答案

您可以尝试仅更新那些使用 .loc 条件匹配的行:

df.loc[df['Conflict'] == 'Match Conflict', 'Words'] = df.loc[df['Conflict'] == 'Match Conflict', 'Words'].apply(lambda x: func(x))

enter image description here

关于python - 如何根据另一列中的值将函数应用于 Pandas 中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com