gpt4 book ai didi

python - 使用 np.nans 从 python 数据框中选择数据部分

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

我有一些代码可以生成包含日期列和 x (给定值)的数据帧输出。 df=

   index      date                    colx
2018-08-09 NaN NaN
2018-08-10 2018-08-10 00:00:00 -0.200460
2018-08-13 NaN NaN
2018-08-14 NaN NaN
2018-08-15 NaN NaN
2018-08-16 NaN NaN
2018-08-17 NaN NaN
2018-08-20 NaN NaN
2018-08-21 NaN NaN
2018-08-22 2018-08-22 00:00:00 -2.317475
2018-08-23 2018-08-23 00:00:00 -1.652724
2018-08-24 2018-08-24 00:00:00 -3.669870
2018-08-27 2018-08-27 00:00:00 -3.807074
2018-08-28 2018-08-28 00:00:00 -0.257006
2018-08-29 NaN NaN
2018-08-30 2018-08-30 00:00:00 -0.374825
2018-08-31 2018-08-31 00:00:00 -5.655345
2018-09-03 2018-09-03 00:00:00 -4.631105
2018-09-04 2018-09-04 00:00:00 -4.722768
2018-09-05 2018-09-05 00:00:00 -3.012673
2018-09-06 NaN NaN

对于选定的值,日期列与索引相同,对于其他部分,日期列与 np.nan 相同。

我想要实现但不确定如何实现的是提取数据 block 的第一个日期和最后一个日期(没有 00:00:00)

在以下链接的帮助下,我能够解决cumsum问题,但无法将数据提取到下面所需的输出中:

python pandas conditional cumulative sum

b = df.colx    
c = b.cumsum()
df['cumsumcolx']=c.sub(c.mask(b != 0).ffill(), fill_value=0).astype(float)

这段代码给了我:

   index      date                    colx     cumsumcolx
2018-08-09 0 0 0
2018-08-10 2018-08-10 00:00:00 -0.200460 -0.200460
2018-08-13 0 0 0
2018-08-14 0 0 0
2018-08-15 0 0 0
2018-08-16 0 0 0
2018-08-17 0 0 0
2018-08-20 0 0 0
2018-08-21 0 0 0
2018-08-22 2018-08-22 00:00:00 -2.317475 -2.317475
2018-08-23 2018-08-23 00:00:00 -1.652724 -3.970198
2018-08-24 2018-08-24 00:00:00 -3.669870 -7.640069
2018-08-27 2018-08-27 00:00:00 -3.807074 -11.447143
2018-08-28 2018-08-28 00:00:00 -0.257006 -11.704148
2018-08-29 0 0 0
2018-08-30 2018-08-30 00:00:00 -0.374825 -0.374825
2018-08-31 2018-08-31 00:00:00 -5.655345 -6.030169
2018-09-03 2018-09-03 00:00:00 -4.631105 -10.661275
2018-09-04 2018-09-04 00:00:00 -4.722768 -15.384043
2018-09-05 2018-09-05 00:00:00 -3.012673 -18.396715
2018-09-06 0 0 0

因此,我寻求提取方面的帮助,以便实现表/数据帧的预期输出:

entrydate     exitdate      cumsumcolx 
2018-08-10 2018-08-10 -0.200460
2018-08-22 2018-08-28 -11.704148
2018-08-30 2018-09-05 -18.396715

我的 df 很长,因此仅摘取其中的一小段用于说明目的。

谢谢

最佳答案

首先,您需要标记组之间的分隔:

blanks = df.date.isnull()

然后为组本身添加标签:

df['group'] = blanks.cumsum()

现在您有一列标记每个组,但有一个小缺陷,即每个组的第一个成员是 NAN 行。只需删除这些行:

df = df[~blanks]

然后使用groupby:

grouped = df.groupby('group')
entrydate = grouped.date.first()
exitdate = grouped.date.last()
cumsumcolx = grouped.colx.sum()

关于python - 使用 np.nans 从 python 数据框中选择数据部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52455193/

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