gpt4 book ai didi

python - pandas.DataFrame 中一列的反向累积总和

转载 作者:太空狗 更新时间:2023-10-29 17:02:57 24 4
gpt4 key购买 nike

我有一个 pandas DataFrame,其中一个 bool 列按另一列排序,需要计算 bool 列的反向累积和,即从当前行到底部的真实值的数量。

例子

In [13]: df = pd.DataFrame({'A': [True] * 3 + [False] * 5, 'B': np.random.rand(8) })

In [15]: df = df.sort_values('B')

In [16]: df
Out[16]:
A B
6 False 0.037710
2 True 0.315414
4 False 0.332480
7 False 0.445505
3 False 0.580156
1 True 0.741551
5 False 0.796944
0 True 0.817563

我需要一些能给我新列值的东西

3
3
2
2
2
2
1
1

也就是说,对于每一行,它应该包含该行和下面几行的 True 值的数量。

我尝试了各种使用 .iloc[::-1] 的方法,但结果并不理想。

看来我遗漏了一些明显的信息。我昨天才开始使用 Pandas。

最佳答案

反转A列,取cumsum,然后再次反转:

df['C'] = df.loc[::-1, 'A'].cumsum()[::-1]

import pandas as pd
df = pd.DataFrame(
{'A': [False, True, False, False, False, True, False, True],
'B': [0.03771, 0.315414, 0.33248, 0.445505, 0.580156, 0.741551, 0.796944, 0.817563],},
index=[6, 2, 4, 7, 3, 1, 5, 0])
df['C'] = df.loc[::-1, 'A'].cumsum()[::-1]
print(df)

产量

       A         B  C
6 False 0.037710 3
2 True 0.315414 3
4 False 0.332480 2
7 False 0.445505 2
3 False 0.580156 2
1 True 0.741551 2
5 False 0.796944 1
0 True 0.817563 1

或者,您可以计算 A 列中 True 的数量并减去(移位的)cumsum:

In [113]: df['A'].sum()-df['A'].shift(1).fillna(0).cumsum()
Out[113]:
6 3
2 3
4 2
7 2
3 2
1 2
5 1
0 1
Name: A, dtype: object

但这要慢得多。使用 IPython执行基准测试:

In [116]: df = pd.DataFrame({'A':np.random.randint(2, size=10**5).astype(bool)})

In [117]: %timeit df['A'].sum()-df['A'].shift(1).fillna(0).cumsum()
10 loops, best of 3: 19.8 ms per loop

In [118]: %timeit df.loc[::-1, 'A'].cumsum()[::-1]
1000 loops, best of 3: 701 µs per loop

关于python - pandas.DataFrame 中一列的反向累积总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37872565/

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