我想对DataFrame中的一个系列进行重新采样,其中DataFrame中的所有其他系列对于每个索引都具有相同的数据。我可以对一个系列进行重新采样,但是如何复制数据呢?
如果我以df
开头:
value data_1 data_2 data_3 data_4
effective_date
2018-7-31 4.010784 17901701 3mra Actual 0.01
2018-8-31 2.044298 17901701 3mra Actual 0.01
2018-10-31 11.493831 17901701 3mra Actual 0.01
2018-11-30 13.929844 17901701 3mra Actual 0.01
2018-12-31 21.500490 17901701 3mra Actual 0.01
并要在9月日期中添加一个值0
,所有其他数据保持不变:
value data_1 data_2 data_3 data_4
effective_date
2018-7-31 4.010784 17901701 3mra Actual 0.01
2018-8-31 2.044298 17901701 3mra Actual 0.01
2018-9-30 0.000000 17901701 3mra Actual 0.01
2018-10-31 11.493831 17901701 3mra Actual 0.01
2018-11-30 13.929844 17901701 3mra Actual 0.01
2018-12-31 21.500490 17901701 3mra Actual 0.01
我可以使用以下代码对value
进行重新采样:
df.value.resample('M').first().fillna(0)
获得:
effective_date
2018-07-31 4.010784
2018-08-31 2.044298
2018-09-30 0.000000
2018-10-31 11.493831
2018-11-30 13.929844
2018-12-31 21.500490
将其他值复制到df
的最有效方法是什么?
答案 0 :(得分:2)
您可以使用resample
对整个DataFrame进行重新采样,然后用0和ffill
的所有其他列填充“值”列的NA:
df.resample('M').first().fillna({'value': 0}).ffill()
输出:
value data_1 data_2 data_3 data_4
effective_date
2018-07-31 4.010784 17901701.0 3mra Actual 0.01
2018-08-31 2.044298 17901701.0 3mra Actual 0.01
2018-09-30 0.000000 17901701.0 3mra Actual 0.01
2018-10-31 11.493831 17901701.0 3mra Actual 0.01
2018-11-30 13.929844 17901701.0 3mra Actual 0.01
2018-12-31 21.500490 17901701.0 3mra Actual 0.01
答案 1 :(得分:1)
在resample
之后,您可以通过where
s=df.resample('M').ffill()
s.value=s.value.where(s.index.isin(df.index),0)
s
Out[249]:
value data_1 data_2 data_3 data_4
effective_date
2018-07-31 4.010784 17901701 3mra Actual 0.01
2018-08-31 2.044298 17901701 3mra Actual 0.01
2018-09-30 0.000000 17901701 3mra Actual 0.01
2018-10-31 11.493831 17901701 3mra Actual 0.01
2018-11-30 13.929844 17901701 3mra Actual 0.01
2018-12-31 21.500490 17901701 3mra Actual 0.01