避免多次在 pandas 中编写相同的 .loc

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


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'])

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


GCT1015
浏览 134回答 2
2回答

慕姐4208626

您可以创建一个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 liketmp_df *= 2 # just as example# them assign the value back to df only for the rows and columns you wantdf.loc[mask, 'col3'] = tmp_df.sum(axis=1)但是你仍然需要mask在loc'col3'中分配值时。等式右边的操作可能更容易阅读

宝慕林4294392

如果您没有重复的索引,您可以尝试:df.loc[df['col1'] > df['col2'], 'col3'] = df['col2'] +  df['col3']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python