python - 使用 sum 代替 bfill 或 ffill 重新索引 Pandas DataFrame

标签 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'])

在我的农场,我有一个测量降雨量的杯子。每隔一段时间,我都会检查自上次阅读以来已经下了多少雨......即每次我检查杯子里的降雨量时,我都会倒掉水,这样它就会“重置”。我将降雨量读数存储在名为 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 的日期。在水果列中,我想查看每行指示的时间与上一行指示的时间之间该种水果的总数。 IE。每行都包含有关自上一行以来降雨量以及自上一行以来每种水果被采摘了多少的数据。

解决这个问题的正确方法是什么?

我想我想做类似 reindex 的事情但使用 sum 的填充方法(不存在)。想法?

最佳答案

您将如何定义降雨期?例如,我将 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]

第一行所做的是为句点创建一列:

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]

降雨量 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

关于python - 使用 sum 代替 bfill 或 ffill 重新索引 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249610/

相关文章:

python - Django (nonrel)、App 引擎和异步数据库调用

python - 无法安装 MySQL-python "invalid command ' egg_info'”

python - 将 pandas 时区感知的 DateTimeIndex 转换为天真的时间戳,但在特定时区

python - 具有日期时间索引和不同长度的三个系列的总和?

python - 如何根据另一列的值获取两列组合的所有排列的列表?

python - 使用不重叠的文本优雅地注释 pandas plot

python - 如何将我自己的模块添加到我的 Anaconda 环境中

python - 返回列表的元素,直到第一个偶数

python - pandas - get_dummies 乘以数量

python - 如何将公交车进/出站记录汇总到行程中,赋予唯一ID,并剔除时间差异小的重复记录?