gpt4 book ai didi

python - Pandas 根据一列中的值的条件一次覆盖多列中的值

转载 作者:行者123 更新时间:2023-12-03 14:34:56 27 4
gpt4 key购买 nike

我有这样的数据帧:

df = pd.DataFrame(data={
'col0': [11, 22,1, 5]
'col1': ['aa:a:aaa', 'a:a', 'a', 'a:aa:a:aaa'],
'col2': ["foo", "foo", "foobar", "bar"],
'col3': [True, False, True, False],
'col4': ['elo', 'foo', 'bar', 'dupa']})

我想在 col1 中的“:”上拆分后获取列表的长度,然后我想在长度 > 2 时覆盖这些值,或者在长度 <= 2 时不覆盖这些值。

理想情况下,尽可能快地排成一行。

目前,我尝试但它返回 ValueError。
df[['col1', 'col2', 'col3']] = df.loc[df['col1'].str.split(":").apply(len) > 2], ("", "", False), df[['col1', 'col2', 'col3']])

编辑:
col1 上的条件。
EDIT2:感谢您提供的所有出色且快速提供的答案。太棒了!
EDIT3:10^6 行计时:

@ansev
3.2657s

@jezrael
0.8922s

@anky_91
1.9511s

最佳答案

使用 Series.str.count , 添加 1 , 比较 Series.gt 并将列表分配给列表中的过滤列:

df.loc[df['col1'].str.count(":").add(1).gt(2), ['col1','col2','col3']] = ["", "", False]
print (df)
col0 col1 col2 col3 col4
0 11 False elo
1 22 a:a foo False foo
2 1 a foobar True bar
3 5 False dupa

关于python - Pandas 根据一列中的值的条件一次覆盖多列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59825672/

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