这是一些说明我的问题的代码import pandas as pdimport numpy as np# Create random dataframedf = 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'])基本上,在某些情况下,我想对具有较长条件的数据框进行子集化,并用基于其他列的表达式替换值。这就是我最终写它的方式,但我认为可能有更好的方法来做到这一点
2 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
您可以创建一个mask, 在这个特定的求和操作中,您可以通过以下方式进行简化+=:
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)
但是你仍然需要mask在loc'col3'中分配值时。等式右边的操作可能更容易阅读
宝慕林4294392
TA贡献2021条经验 获得超8个赞
如果您没有重复的索引,您可以尝试:
df.loc[df['col1'] > df['col2'], 'col3'] = df['col2'] + df['col3']
添加回答
举报
0/150
提交
取消