[英]Can someone help me create SUMIFS function equivalent on Python?
我上周基本學習了Python,盡管我目前正在學習基礎知識,但我的任務是在工作中使用python構建一個小程序。 並希望對此有所幫助。 我想創建一個類似於Excel版本的SUMIFS函數。 我的數據包含現金流量日期(CFDATE),投資組合名稱(PORTFOLIO)和現金流量金額(CF)。 我想根據CF所屬的投資組合以及下跌的日期來總結CF。 我設法使用下面的代碼實現了這一點,但是我正在努力將結果輸出為數組/表,其中標題行包含所有投資組合,而初始列是日期(刪除重復項)和CF根據(CFDATE,PORTFOLIO)的每種組合進行分組。
例如期望的輸出:PORTFOLIO->'A''B''C'CFDATE
'30 / 09/2017'300600300 '31 / 10/2017'300 0 600
到目前為止使用的代碼:
from pandas import Series,DataFrame
from numpy import matrix
import numpy as np
import pandas as pd
df = DataFrame(pd.read_csv("...\Test.csv"))
portfolioMapping = sorted(list(set(df.PORTFOLIO)))
cfDateMapping = list(set(df.CFDATE))
for i in range(0,len(portfolioMapping)):
dfVar = df.CF * np.where(df.PORTFOLIO == portfolioMapping[i] , 1, 0)
for j in range(0,len(cfDateMapping)):
dfVar1 = df.CF/df.CF * np.where(df.CFDATE == cfDateMapping[j] , 1, 0)
print([portfolioMapping[i],[cfDateMapping[j]],sum(dfVar*dfVar1)])
數據基本上是這樣的形式:
PORTFOLIO CFDATE CF
A 30/09/2017 300
A 31/10/2017 300
C 31/10/2017 300
B 30/09/2017 300
B 30/09/2017 300
C 30/09/2017 300
C 31/10/2017 300
C 31/10/2017 300
在此問題上,我將不勝感激。
df = df.groupby(['CFDATE', 'PORTFOLIO'])['CF'].sum().unstack(fill_value=0)
print (df)
PORTFOLIO A B C
CFDATE
30/09/2017 300 600 300
31/10/2017 300 0 900
或pivot_table
:
df = df.pivot_table(index='CFDATE',
columns='PORTFOLIO',
values='CF',
aggfunc=sum,
fill_value=0)
print (df)
PORTFOLIO A B C
CFDATE
30/09/2017 300 600 300
31/10/2017 300 0 900
您可以使用Pandas的pivot_table()
來簡單地做到這一點:
df.pivot_table(index='CFDATE', columns=['PORTFOLIO'], aggfunc=sum, fill_value=0)
結果如下:
PORTFOLIO A B C
CFDATE
30/09/2017 300 600 300
31/10/2017 300 0 900
我認為您的情況最好是使用如下的groupby
方法:
df.groupby(['PORTFOLIO', 'CFDATE']).sum()
CF
PORTFOLIO CFDATE
A 30/09/2017 600
31/10/2017 300
B 30/09/2017 600
C 30/09/2017 300
31/10/2017 900
基本上,將dataframe
df
分組后,就可以對其執行各種方法(例如sum()
, mean()
, min()
, max()
等)
另外,您可以將分組的數據框存儲在如下所示的對象中:
grouped = df.groupby(['PORTFOLIO', 'CFDATE'])
這使得以后執行不同的計算更加靈活:
grouped.sum()
grouped.mean()
grouped.count()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.