Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.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 将Groupby之后的两个Dataframe列除以顺序时间_Python_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

Python 将Groupby之后的两个Dataframe列除以顺序时间

Python 将Groupby之后的两个Dataframe列除以顺序时间,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我用20年的数据工作。现在重要的列是年、月、NUM1和NUM2。如何获得NUM1/NUM2的每月百分比 YEAR | MONTH | NUM1 | NUM2 | ------------------------------ 2000 | 6 | 60 | 100 | 2000 | 6 | 55 | 100 | 2000 | 2 | 80 | 160 | to YEAR | MONTH | NUM1 | NUM2 | PCT | ---------

我用20年的数据工作。现在重要的列是年、月、NUM1和NUM2。如何获得NUM1/NUM2的每月百分比

YEAR | MONTH | NUM1 | NUM2 |
------------------------------
2000 |  6    |  60  | 100  |
2000 |  6    |  55  | 100  |
2000 |  2    | 80    | 160 |

to

YEAR | MONTH | NUM1 | NUM2 |  PCT  |
-------------------------------------
2000 |  2    | 80    | 160 |  50   |
2000 |  6    |  60  | 100  |  57.5 |
2000 |  6    |  55  | 100  |  57.5 |
我想做的是

df2 = df.groupby(['YEAR', 'MONTH'], as_index=False)
df2['PCT'] = df2['NUM1']/df2['NUM2']
但是,我得到了
TypeError:/:'DataFrameGroupBy'和'DataFrameGroupBy'不支持的操作数类型


当我运行
type(df2)
时,它返回
pandas.core.groupby.generic.DataFrameGroupBy
。我做错了什么?我怎样才能解决这个问题?按时间顺序对数据排序,然后划分为列应该非常简单。

您应该添加
transform

g = df.groupby(['YEAR', 'MONTH'])
df['PCT']=g.NUM1.transform('sum')/g.NUM2.transform('sum')*100
df
   YEAR  MONTH  NUM1  NUM2   PCT
0  2000      6    60   100  57.5
1  2000      6    55   100  57.5
2  2000      2    80   160  50.0
您没有定义要在列上执行的操作 希望这能回答您的疑问

相关链接-

import numpy as np
import pandas as pd

df = pd.DataFrame({'YEAR': [2000, 2001, 2000, 2000],
                   'MONTH': [2, 4, 6, 2],
                   'sales': [2000, 2001, 2000, 2003],
                   'price': [2020, 2200, 20020, 20023]})

#df.head()

#data.groupby('month', as_index=False).agg({"duration": "sum"})

state_office = df.groupby(['YEAR', 'MONTH']).agg({'sales':"sum","price":"sum"})

state_office['PCT'] = (state_office['sales']/state_office['price']).mul(100)
state_office.head()