Python 根据索引匹配,有选择地使用df.div()仅分割某一列
我有两个数据帧,一个是每月总计,另一个包含我想要除以第一个的值,以获得每月百分比贡献Python 根据索引匹配,有选择地使用df.div()仅分割某一列,python,pandas,division,Python,Pandas,Division,我有两个数据帧,一个是每月总计,另一个包含我想要除以第一个的值,以获得每月百分比贡献 Data = pd.DataFrame(data={'ID':[1,2,3,1,2,3,1,2,3], 'Month':[1,1,1,2,2,2,3,3,3], 'Value':[40,30,30,60,70,70,150,60,90]}) Data['MonthlyTotal'] = Data.Gropub
Data = pd.DataFrame(data={'ID':[1,2,3,1,2,3,1,2,3],
'Month':[1,1,1,2,2,2,3,3,3],
'Value':[40,30,30,60,70,70,150,60,90]})
Data['MonthlyTotal'] = Data.Gropuby('Month')['Value'].transform('sum')
Data['Contributions'] = Data['Value'] / Data['MonthlyTotal']
以下是一些数据帧示例:
MonthlyTotals = pd.DataFrame(data={'Month':[1,2,3],'Value':[100,200,300]})
Data = pd.DataFrame(data={'ID':[1,2,3,1,2,3,1,2,3],
'Month':[1,1,1,2,2,2,3,3,3],
'Value':[40,30,30,60,70,70,150,60,90]})
我使用的是df.div()
,所以我像这样设置索引
MonthlyTotals.set_index('Month', inplace=True)
Data.set_index('Month', inplace=True)
然后我做除法
Contributions = Data.div(MonthlyTotals, axis='index')
生成的数据帧是我想要的,但是我看不到值所涉及的ID
,因为它不在MonthlyTotals
帧中。如何使用df.div()
,但仅在某些列上有选择地使用
下面是我正在寻找的结果的一个示例数据帧
result = pd.DataFrame(data={'ID':[1,2,3,1,2,3,1,2,3],'Value':[0.4,0.3,0.3,0.3,0.35,0.35,0.5,0.2,0.3]})
另外,如果您只想使用pandas,您可以使用reindex
+update
Data.update(Data['Value'].div(MonthlyTotals['Value'].reindex(Data.index),axis=0))
Data
ID Value
Month
1 1 0.40
1 2 0.30
1 3 0.30
2 1 0.30
2 2 0.35
2 3 0.35
3 1 0.50
3 2 0.20
3 3 0.30
如果数据完整,您可能不需要每月汇总。您可以使用transform
计算MonthlyTotal,然后计算供款
Data = pd.DataFrame(data={'ID':[1,2,3,1,2,3,1,2,3],
'Month':[1,1,1,2,2,2,3,3,3],
'Value':[40,30,30,60,70,70,150,60,90]})
Data['MonthlyTotal'] = Data.Gropuby('Month')['Value'].transform('sum')
Data['Contributions'] = Data['Value'] / Data['MonthlyTotal']
输出
ID Month Value MonthlyTotal Contributions
0 1 1 40 100 0.40
1 2 1 30 100 0.30
2 3 1 30 100 0.30
3 1 2 60 200 0.30
4 2 2 70 200 0.35
5 3 2 70 200 0.35
6 1 3 150 300 0.50
7 2 3 60 300 0.20
8 3 3 90 300 0.30
在这里,您已将ID除以(?)。我要查找的是与值相关的ID。我用一个示例结果数据框更新了我的问题。这就是獾!