gpt4 book ai didi

python - 避免在 pandas 中多次写入相同的 .loc

转载 作者:行者123 更新时间:2023-12-02 09:03:21 26 4
gpt4 key购买 nike

这是一些说明我的问题的代码

import pandas as pd
import numpy as np

# Create random dataframe
df = pd.DataFrame({'col1': np.random.randint(0, 9, 10),
'col2': np.random.randint(0, 9, 10),
'col3': np.random.randint(0, 9, 10)})

# Can this be written in a better way?
df.loc[df['col1'] > df['col2'], 'col3'] = (df.loc[df['col1'] > df['col2'], 'col2'] +
df.loc[df['col1'] > df['col2'], 'col3'])

基本上,在这种情况下,我想对具有较长条件的数据帧进行子集化,并用基于其他列的表达式替换值。这就是我最终写的方式,但我认为可能有更好的方法来做到这一点

最佳答案

您可以创建一个掩码,在这个特定的求和运算中,您可以使用+= 进行简化,如下所示:

mask = df['col1'] > df['col2']
df.loc[mask, 'col3'] += df.loc[mask, 'col2']

如果您想创建子集,您可以尝试以下操作:

mask = df['col1']>df['col2']
tmp_df = df.loc[mask, ['col2', 'col3']]
# here you could do whatever on tmp_df without modifying df like
tmp_df *= 2 # just as example
# them assign the value back to df only for the rows and columns you want
df.loc[mask, 'col3'] = tmp_df.sum(axis=1)

但在“col3”中分配值时,您仍然需要 loc 中的mask。等式右边的运算可能更容易阅读

关于python - 避免在 pandas 中多次写入相同的 .loc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61364217/

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