gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:15:48 25 4
gpt4 key购买 nike

假设我是一名农民……我经常去田地里采摘所有成熟的苹果、梨和李子。我跟踪每天在名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com