我有两个数据帧。我想通过除以第二个数据框中的特定数据(取决于日期)在第一个数据框中创建一个新列。
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']
所有日期都存在于两个数据框中。如何基于'Date'将df1的'Count'列中的值除以df2中的'Average'值?
显然df1 ['Divided'] = df1 ['Date','Count']。div [df2 ['Date','Average']无效,但这是一种想法。我已经尝试了各种方法,包括转换为字典并尝试映射值,但我无法弄清楚。
将'df2'加入到'df1'的日期,以使行数相同并相除。它符合问题的意图吗?
df1.reset_index(inplace=True)
df2.reset_index(inplace=True)
df3 = pd.merge(df1['Date'], df2, on='Date', how='inner')
df1['Divided'] = df1['Count'] / df3['Average']
df1
Date Animal Dose Count Divided
0 2020-02-01 Cat 0 10 10.000000
1 2020-02-01 Cat 2 5 5.000000
2 2020-02-01 Dog 1 7 7.000000
3 2020-02-03 Cat 0 3 0.600000
4 2020-02-03 Cat 1 4 0.800000
5 2020-02-03 Dog 2 10 2.000000
6 2020-02-05 Cat 0 1 0.333333
7 2020-02-05 Cat 2 17 5.666667
8 2020-02-05 Dog 1 20 6.666667
9 2020-02-08 Dog 0 13 0.419355
10 2020-02-08 Dog 1 13 0.419355
11 2020-02-09 Cat 0 30 2.142857
12 2020-02-09 Cat 2 1 0.071429
13 2020-02-09 Dog 1 12 0.857143
14 2020-02-09 Dog 2 14 1.000000