Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过pandas groupby功能查找盈利投资的百分比_Python_Pandas_Dataframe - Fatal编程技术网

Python 通过pandas groupby功能查找盈利投资的百分比

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

我有一个像这样的熊猫数据框;它展示了股票投资的历史。在利润栏中,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       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