Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按组扩展缺少日期的数据框并插值_Python_Pandas - Fatal编程技术网

Python 按组扩展缺少日期的数据框并插值

Python 按组扩展缺少日期的数据框并插值,python,pandas,Python,Pandas,我有这样一个数据框: df = pd.DataFrame({"ID":["A", "A", "A" ,"B", "B"], "date":["06/24/2014","06/26/2014","06/29/2014","07/02/1999","07/04/1999"], "value": ["4","6","9","2","4"] }) ID date value 0 A 06/24/2014 4 1 A 06/26/2014 6 2 A 06/2

我有这样一个数据框:

df = pd.DataFrame({"ID":["A", "A", "A" ,"B", "B"], "date":["06/24/2014","06/26/2014","06/29/2014","07/02/1999","07/04/1999"], "value": ["4","6","9","2","4"] })


ID        date value
0  A  06/24/2014     4
1  A  06/26/2014     6
2  A  06/29/2014     9
3  B  07/02/1999     2
4  B  07/04/1999     4
 ID        date value
0  A  06/24/2014     4
1  A  06/25/2014     5
2  A  06/26/2014     6
3  A  06/27/2014     7
4  A  06/28/2014     8
5  A  06/29/2014     9
6  B  07/02/1999     2
7  B  07/03/1999     3
8  B  07/04/1999     4
对于每个组,我希望扩展数据帧以包括日期的最大值和最小值之间的所有缺失日期,然后线性插值列值。结果应该如下所示:

df = pd.DataFrame({"ID":["A", "A", "A" ,"B", "B"], "date":["06/24/2014","06/26/2014","06/29/2014","07/02/1999","07/04/1999"], "value": ["4","6","9","2","4"] })


ID        date value
0  A  06/24/2014     4
1  A  06/26/2014     6
2  A  06/29/2014     9
3  B  07/02/1999     2
4  B  07/04/1999     4
 ID        date value
0  A  06/24/2014     4
1  A  06/25/2014     5
2  A  06/26/2014     6
3  A  06/27/2014     7
4  A  06/28/2014     8
5  A  06/29/2014     9
6  B  07/02/1999     2
7  B  07/03/1999     3
8  B  07/04/1999     4
到目前为止,我的想法如下:

将日期设置为索引:

df.date = pd.DatetimeIndex(df.date)
按ID分组并应用以下功能:

B = df1.groupby('ID').apply(lambda x: x.reindex(pd.date_range(x.date.min(),x.date.max()), fill_value=0) )
最好的方法是什么

谢谢你,

我会这样做:

In [6]: df.groupby('ID').apply(lambda x: x.set_index('date').resample('D').pad())
Out[6]:
              ID value
ID date
A  2014-06-24  A     4
   2014-06-25  A     4
   2014-06-26  A     6
   2014-06-27  A     6
   2014-06-28  A     6
   2014-06-29  A     9
B  1999-07-02  B     2
   1999-07-03  B     2
   1999-07-04  B     4

我必须做一些初始条件,以确保正确的数据类型

安装程序 解决方案

你能发布所需的df吗?是的,我会简化它,以便它看起来很容易,但我想根据日期插入“值”,因此第一个值是4,5,6,7,8,9@dleal,我想piRSquared的解决方案是你想要的w是的,谢谢你,我会用插值代替pad。谢谢你的回答however@dleal,如果要使用插值,首先必须将
列转换为数字数据类型(
int
float
),否则将无法使用。谢谢您的平方运算,看起来很棒。几个问题:1)为什么不指定一个日期范围,比如pd.date\u范围(df.date.min(),df.date.max())?重采样已经处理好了吗?2) group_keys=False的作用是什么?以及3)为什么需要执行此步骤?df.value=pd.to_numeric(df.value,‘强制’)同样,出于某种原因,当我运行它时,它跳过插值并打印出NaNinstead@dleal很好的跟进1)是的,
重新采样
处理范围。2) 当我在
groupby
上使用
apply
而不是其中一个“off-the-shelve”方法时,它会将我分组的内容放入结果中。我已经处理好了,所以我说
False
。3) 您的数据帧具有值的字符串。当我开始这样做时,它失败了,因为它不能插入字符串。所以我把它们变成了可以插值的数字<代码>“强制”处理字符串不能强制为数字的可能性,并返回
np.nan
。是的,您是对的,3)这就是它跳过插值的原因。非常感谢您的澄清