gpt4 book ai didi

python - 基于条件的 Pandas DataFrame 重复值

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:26 25 4
gpt4 key购买 nike

我正在尝试根据列中的条件重复 DataFrame 中的行值。如果列 Change = 1 中的值,那么我想重复 A、B 和 C 列中的值,直到下一个 Change = 1。

index = pandas.date_range('20000131', periods=5)
columns = ['A', 'B', 'C', 'Change']

data = {'A': pandas.Series([False, True, False, True, False], index=index)
, 'B': pandas.Series([True, True, False, False, False], index=index)
, 'C': pandas.Series([True, False, True, True, True], index=index)
, 'Change' : pandas.Series([1,0,0,1,0], index=index)}

结果:

                A      B      C  Change
2000-01-31 False True True 1
2000-02-01 True True False 0
2000-02-02 False False True 0
2000-02-03 True False True 1
2000-02-04 False False True 0

期望的结果:

                A      B      C  Change
2000-01-31 False True True 1
2000-02-01 False True True 0
2000-02-02 False True True 0
2000-02-03 True False True 1
2000-02-04 True False True 0

这是我使用 shift() 所能获得的最接近的结果,但它只持续一行。我需要它持续 N 行。在下面的示例中,它在第三行(或具有 0 碱基的第二行)中分解。

print pandas.DataFrame(numpy.where(pandas.DataFrame(df['Change']==1)
, df, df.shift()))

结果:

       0      1      2  3
0 False True True 1
1 False True True 1
2 False True False 0
3 True False True 1
4 True False True 1

谢谢。

最佳答案

您可以使用 NaN 和 ffill 填充 Change == 0 行:

In [11]: df.loc[df.Change != 1, ['A', 'B', 'C']] = numpy.nan

In [12]: df
Out[12]:
A B C Change
2000-01-31 0 1 1 1
2000-02-01 NaN NaN NaN 0
2000-02-02 NaN NaN NaN 0
2000-02-03 1 0 1 1
2000-02-04 NaN NaN NaN 0

In [13]: df.ffill()
Out[13]:
A B C Change
2000-01-31 0 1 1 1
2000-02-01 0 1 1 0
2000-02-02 0 1 1 0
2000-02-03 1 0 1 1
2000-02-04 1 0 1 0

如果您需要将它们作为 bool 列,则在每一列上使用 astype(bool)

顺便说一句,您几乎可以通过重新取样(除了最后缺失的行和已更改的列):

In [14]: df[df.Change == 1].resample('D', fill_method='ffill')
Out[14]:
A B C Change
2000-01-31 0 1 1 1
2000-02-01 0 1 1 1
2000-02-02 0 1 1 1
2000-02-03 1 0 1 1

关于python - 基于条件的 Pandas DataFrame 重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24215315/

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