[英]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
所有列可能有多個( Pnl
被pop
刪除), 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.