Reindex Pandas DataFrame使用sum而不是bfill或ffill

时间:2014-04-23 15:59:45

标签: python pandas

说我是农民......我经常去田里挑选所有成熟的苹果,梨和李子。我会在一个名为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的填充方法(它不存在)。想法?

1 个答案:

答案 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