说我是农民......我经常去田里挑选所有成熟的苹果,梨和李子。我会在一个名为pick_counts
的数据框中跟踪我每天选择的数量:
import pandas as pd
import numpy as np
np.random.seed(0)
pick_counts = pd.DataFrame(np.random.randint(0, 20, [10,3]),
index=pd.date_range('8/16/2004', periods=10, freq='D'),
columns=['apples', 'pears', 'plums'])
在我的农场,我有一个测量降雨量的杯子。而且每隔一段时间,我会检查自从我上次阅读以来已经下降了多少 ...即。每次检查杯子里的降雨量时,我都会把水倒掉,这样就可以重新安装。#34;我将降雨量读数存储在一个名为rainfall
:
rainfall = pd.Series(np.random.rand(4),
index=pd.date_range('8/16/2004 12:15PM',
periods=4,
freq='80H'))
现在作为一个合理的农民,我想知道一定时期内的降雨量是否对我在此期间采摘的每种水果的数量有任何影响。因此,我想制作一个包含['apples', 'pears', 'plums', 'rainfall']
列的数据框,其中行是rainfall
的日期。在水果专栏中,我希望看到每行所示时间与前一行所示时间之间的那种水果总数。即每行将包含自上一行以来降雨量下降的数据以及自上一行以来采摘的每种水果的数量。
正确的方法是什么?
我想我想做reindex
之类的事情,但使用sum
的填充方法(它不存在)。想法?
答案 0 :(得分:2)
您如何定义降雨期?例如,我有8-16为一,8-17到8-19为第二,依此类推。
In [38]:
pick_counts['period']=(pick_counts.index.values>=rainfall.index.values[...,np.newaxis]).sum(0)
gbdf=pick_counts.groupby('period').sum()
gbdf.index=rainfall.index
gbdf['rainfall']=rainfall
print gbdf
apples pears plums rainfall
2004-08-16 12:15:00 12 15 0 0.799159
2004-08-19 20:15:00 16 28 37 0.461479
2004-08-23 04:15:00 47 47 40 0.780529
2004-08-26 12:15:00 5 33 18 0.118274
[4 rows x 4 columns]
第1行正在做的是为期间创建一个列:
In [113]:
print pick_counts
apples pears plums period
2004-08-16 12 15 0 0
2004-08-17 3 3 7 1
2004-08-18 9 19 18 1
2004-08-19 4 6 12 1
2004-08-20 1 6 7 2
2004-08-21 14 17 5 2
2004-08-22 13 8 9 2
2004-08-23 19 16 19 2
2004-08-24 5 15 15 3
2004-08-25 0 18 3 3
[10 rows x 4 columns]
rainfall
DF是这样的:
In [114]:
print rainfall
2004-08-16 12:15:00 0.799159
2004-08-19 20:15:00 0.461479
2004-08-23 04:15:00 0.780529
2004-08-26 12:15:00 0.118274
Freq: 80H, dtype: float64