Python 将Groupby之后的两个Dataframe列除以顺序时间
我用20年的数据工作。现在重要的列是年、月、NUM1和NUM2。如何获得NUM1/NUM2的每月百分比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 | ---------
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()