gpt4 book ai didi

python - 如何截断 Pandas 时间序列数据框中的列以删除前导零和尾随零?

转载 作者:行者123 更新时间:2023-12-02 17:34:54 25 4
gpt4 key购买 nike

我在 Pandas 中有以下时间序列 df:

date          value
2015-01-01 0
2015-01-02 0
2015-01-03 0
2015-01-04 3
2015-01-05 0
2015-01-06 4
2015-01-07 0

我想删除前导和尾随零,以便得到以下 df:

date          value
2015-01-04 3
2015-01-05 0
2015-01-06 4

简单地删除其中包含 0 的行也会导致删除中间的 0,这是我不希望的。

我想编写一个从第一行开始然后继续直到第一个非 0 值的正向循环,以及从末尾返回并在最后一个非 0 值处停止的第二个反向循环。但这似乎有些过分了,有没有更有效的方法呢?

最佳答案

如果测试的掩码累积和数据中的所有 0 值不等于 0 值并通过 [::- 交换值,则一般解决方案返回空 DataFrame 1] 通过按位 AND 链接并按 boolean indexing 过滤:

s = df['value'].ne(0)
df = df[s.cumsum().ne(0) & s[::-1].cumsum().ne(0)]
print (df)
date value
3 2015-01-04 3
4 2015-01-05 0
5 2015-01-06 4

如果始终至少有一个非 0 值是可能的,则将 0 转换为缺失值并使用 DataFrame.locDataFrame.first_valid_indexDataFrame.last_valid_index :

s = df['value'].mask(df['value'] == 0)
df = df.loc[s.first_valid_index():s.last_valid_index()]
print (df)
date value
3 2015-01-04 3
4 2015-01-05 0
5 2015-01-06 4

另一个想法是使用 DataFrame.idxmaxDataFrame.idxmin :

s = df['value'].eq(0)
df = df.loc[s.idxmin():s[::-1].idxmin()]
print (df)
date value
3 2015-01-04 3
4 2015-01-05 0
5 2015-01-06 4

s = df['value'].ne(0)
df = df.loc[s.idxmax():s[::-1].idxmax()]

关于python - 如何截断 Pandas 时间序列数据框中的列以删除前导零和尾随零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60372441/

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