【发布时间】:2017-09-19 13:41:25
【问题描述】:
我已经问过我的问题,但它的描述不够准确。 这个论坛的聪明人已经提出了解决方案,但我忘了(抱歉)如果相关列中有零,应该保留。
您好,我有一个如下所示的数据框
2014 2015 2016 2017 2018 2019
2014 10 20 30 40 0 5
2015 0 0 200 0 100 0
2016 0 0 200 140 35 10
2017 0 0 0 20 0 12
我需要这样的结果:
yearStart yearStart+1 yearStart+2 yearStart+3 yearStart+4
0 10 20 30 40 0
1 0 200 0 100 0
2 200 140 35 10 0
3 20 0 12 0 0
想法是在每一行中选择两个日期之间的列:
index 和 index +delta,使用 delta 参数(在本例中为 4)将它们放入数据帧中。
使用 iterrows() 会花费太多时间。
我试过了
df1 = df.apply(lambda x: pd.Series(x[x.keys()>=x.index],1)).fillna(0).astype(int)
但它不起作用:
TypeError: ('Index(...) must be called with a collection of some kind,
1 was passed', 'occurred at index 2014')
谢谢
【问题讨论】:
-
您应该编辑您的第一个问题以阐明您的要求,而不是打开一个与第一个问题基本相同的新问题。
-
对不起,我是这个论坛的初学者。我为我的笨拙道歉。无论如何谢谢你。必须保留一些零的事实让我有理由认为这是另一种情况。
标签: python python-3.x pandas apply