簡體   English   中英

如何對pandas列的特定行進行求和

[英]How to sum specific rows of pandas columns

我有以下數據:

    W   X   Y   Z   Pnl
A   1   0   0   0   25    
B   1   1   0   0   34    
C   1   0   0   0   -15    
D   0   0   0   1   2    
E   0   1   0   0   88    
F   1   0   0   0   -46

我想要以下輸出:

W   -2  # =25+34-15-46
X   122    
Y   0    
Z   2

使用DataFrame.pop作為提取列,因此DataFrame.mul所有列可能有多個( Pnlpop刪除), DataFrame.sum每行的最后總和:

df = df.mul(df.pop('Pnl'), axis=0).sum() 
print (df)
W     -2
X    122
Y      0
Z      2
dtype: int64

通過對前4列執行廣播乘法來解決此問題,然后對行求和:

df.iloc[:,:-1].mul(df['Pnl'], axis=0).sum()

W     -2
X    122
Y      0
Z      2
dtype: int64

哪里,

df.iloc[:,:-1].mul(df['Pnl'], axis=0)

    W   X  Y  Z
A  25   0  0  0
B  34  34  0  0
C -15   0  0  0
D   0   0  0  2
E   0  88  0  0
F -46   0  0  0

你也可以使用df.mul(df.pop('Pnl'), axis=0).sum()但要注意pop破壞性地修改df ,避免你需要保留輸入。


如果性能很重要,請使用numpy

# <0.24 versions 
(df.pop('Pnl').values[:,None] * df.values).sum(axis=0)
# v0.24 onwards
(df.pop('Pnl').to_numpy()[:,None] * df.to_numpy()).sum(axis=0)
# array([ -2, 122,   0,   2])

pd.Series((df.pop('Pnl').to_numpy()[:,None] * df.to_numpy()).sum(axis=0),
          index=df.columns)

W     -2
X    122
Y      0
Z      2
dtype: int64
pnl = df[['Pnl']]
df.drop(['Pnl'],axis=1,inplace=True)
res = pd.DataFrame(df.values * pnl.values,columns=df.columns)
final_res= res.sum(axis=0)

輸出:

W     -2
X    122
Y      0
Z      2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM