這是一些說明我的問題的代碼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'])基本上,在某些情況下,我想對具有較長條件的數(shù)據(jù)框進(jìn)行子集化,并用基于其他列的表達(dá)式替換值。這就是我最終寫它的方式,但我認(rèn)為可能有更好的方法來做到這一點
2 回答

慕姐4208626
TA貢獻(xiàn)1852條經(jīng)驗 獲得超7個贊
您可以創(chuàng)建一個mask, 在這個特定的求和操作中,您可以通過以下方式進(jìn)行簡化+=:
mask = df['col1'] > df['col2']
df.loc[mask, 'col3'] += df.loc[mask, 'col2']
如果您想創(chuàng)建一個子集,您可以嘗試以下操作:
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貢獻(xiàn)2021條經(jīng)驗 獲得超8個贊
如果您沒有重復(fù)的索引,您可以嘗試:
df.loc[df['col1'] > df['col2'], 'col3'] = df['col2'] + df['col3']
添加回答
舉報
0/150
提交
取消