python - 根据索引将大数据帧中的数据除以较小数据帧中的数据
问题描述
我有两个数据框。我想根据日期除以第二个数据框中的特定数据,在第一个数据框中创建一个新列。
import pandas as pd
data1 = {'Count': {('2020-02-01','Cat', '0'): 10,
('2020-02-01','Dog', '1'): 7,
('2020-02-01','Cat', '2'): 5,
('2020-02-03','Cat', '0'): 3,
('2020-02-03','Cat', '1'): 4,
('2020-02-03','Dog', '2'): 10,
('2020-02-05','Cat', '0'): 1,
('2020-02-05','Dog', '1'): 20,
('2020-02-05','Cat', '2'): 17,
('2020-02-08','Dog', '0'): 13,
('2020-02-08','Dog', '1'): 13,
('2020-02-09','Dog', '2'): 14,
('2020-02-09','Cat', '0'): 30,
('2020-02-09','Dog', '1'): 12,
('2020-02-09','Cat', '2'): 1}}
df1 = pd.DataFrame(data1)
df1.index.names = ['Date', 'Animal', 'Dose']
data2 = {'Average': {('2020-02-01','0'): 1,
('2020-02-03','0'): 5,
('2020-02-05','0'): 3,
('2020-02-08','0'): 31,
('2020-02-09','0'): 14}}
df2 = pd.DataFrame(data2)
df2.index.names = ['Date', 'Dose']
所有日期都存在于两个数据框中。
如何将'Count'
列中df1
的'Average'
值除以df2
基于的值'Date'
?
显然df1['Divided'] = df1['Date','Count'].div[df2['Date','Average']
行不通,但这是一种想法。
我已经尝试了各种各样的事情,包括转换为字典并尝试映射值,但我无法弄清楚。
我的预期结果如下所示:
data3 = [10/1, 7/1, 5/1, 3/5, 4/5, 10/5, 1/3, 20/3, 17/3, 13/31, 13/31, 14/14, 30/14, 12/14, 1/14]
df1['Divided'] = data3
df1
解决方案
这会起作用:
df1 = df1.reset_index(level=['Animal', 'Dose'])
df2 = df2.reset_index(level=['Dose'])
df1["New_Value"] = df1['Count'].div(df2['Average'])
df1 = df1.reset_index().set_index(['Date', 'Animal', 'Dose'])
输出:
Count New_Value
Date Animal Dose
2020-02-01 Cat 0 10 10.000000
2 5 5.000000
Dog 1 7 7.000000
2020-02-03 Cat 0 3 0.600000
1 4 0.800000
Dog 2 10 2.000000
2020-02-05 Cat 0 1 0.333333
2 17 5.666667
Dog 1 20 6.666667
2020-02-08 Dog 0 13 0.419355
1 13 0.419355
2020-02-09 Cat 0 30 2.142857
2 1 0.071429
Dog 1 12 0.857143
2 14 1.000000
希望这是您正在寻找的。
推荐阅读
- linux-kernel - 如何在 Linux 中收集 /proc/pid/pagemap 的所有更改
- javascript - 滚动到顶部脚本在 Bootstrap 4 中不起作用
- python - 如何搜索值是否在数据框中
- reactjs - React Apollo 从状态动态创建查询
- c# - 使用列表框选择启用/禁用图形系列
- google-app-engine - 谷歌数据存储创建/删除索引的成本是多少
- apache - 从 Apache 到 Tomcat 的 Kerberos 票证 (Windows)
- string - Bash 在文件中替换或创建行
- mysql - 子查询使用 JOINS 返回超过 1 行的问题
- android - 相机拍摄新照片时,Oreo JobScheduler 不工作