Python 通过pandas groupby功能查找盈利投资的百分比
我有一个像这样的熊猫数据框;它展示了股票投资的历史。在利润栏中,1表示盈利,0表示亏损Python 通过pandas groupby功能查找盈利投资的百分比,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个像这样的熊猫数据框;它展示了股票投资的历史。在利润栏中,1表示盈利,0表示亏损 Stock Year Profit Count AAPL 2012 0 23 AAPL 2012 1 19 AAPL 2013 0 20 AAPL 2013 1 10 GOOG 2012 0 26 GOOG 2012 1 20 GOOG 2013 0
Stock Year Profit Count
AAPL 2012 0 23
AAPL 2012 1 19
AAPL 2013 0 20
AAPL 2013 1 10
GOOG 2012 0 26
GOOG 2012 1 20
GOOG 2013 0 23
GOOG 2013 1 11
我必须找出盈利投资的百分比:
Stock Year Profit CountPercent
AAPL 2012 1 38.77
AAPL 2013 1 33.33
GOOG 2012 1 43.47
GOOG 2013 1 32.35
我试着用这个方法
但是它显示了
'TypeError:Join-on-level在两个多索引对象之间是不明确的“
我已经将您的数据加载到一个名为“stocks”的数据框中
这将产生:
Stock Year
AAPL 2012 45.24%
2013 33.33%
GOOG 2012 43.48%
2013 32.35%
Name: Count, dtype: float64
您可以使用:
假设数据帧的格式一致(即“利润”列中0先于1),则可以执行以下
groupby
操作:
>>> grouped = df.groupby(['Stock', 'Year'])
>>> perc = grouped['Count'].last() / grouped['Count'].sum()
>>> perc.reset_index()
Stock Year Count
0 AAPL 2012 0.452381
1 AAPL 2013 0.333333
2 GOOG 2012 0.434783
3 GOOG 2013 0.323529
这只是一个普通的数据帧,因此重命名“Count”列、将其四舍五入到小数点后两位并将“Profit”列重新添加进去应该很简单。请提供您的代码。什么是
CountPercent
?
In [38]: result = df.pivot_table(index=['Stock', 'Year'], columns='Profit', values='Count', aggfunc='sum')
In [39]: result['CountPercent'] = result[1]/(result[0]+result[1])
In [41]: result['CountPercent']
Out[41]:
Stock Year
AAPL 2012 0.452381
2013 0.333333
GOOG 2012 0.434783
2013 0.323529
Name: CountPercent, dtype: float64
>>> grouped = df.groupby(['Stock', 'Year'])
>>> perc = grouped['Count'].last() / grouped['Count'].sum()
>>> perc.reset_index()
Stock Year Count
0 AAPL 2012 0.452381
1 AAPL 2013 0.333333
2 GOOG 2012 0.434783
3 GOOG 2013 0.323529