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

标签 python pandas apply

我有这样的数据帧:

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/

相关文章:

python - SSLV3_ALERT_HANDSHAKE_FAILURE 与 SNI 在 Python 2.9.10 中使用 Tornado 4.2

python - 如何将此字符串转换为 python 列表?

python - Python 生成器中的反向 next()

python - 寻找一种方法来加速 Pandas 中的这个应用功能

r - 如何通过扩展最后一个可用行来填充缺失的行?

python - 填充列日期值,直到达到另一个日期值,然后继续填充新达到的值

python - 扩 Pandas 行的均值

python - 在 split() 操作后获取 pandas 中唯一的字符串列表

python - 使用 Pandas 数据框中的部分数据滚动标准差

反向地理编码速度