gpt4 book ai didi

Python 数据框 : cumulative sum of column until condition is reached and return the index

转载 作者:太空狗 更新时间:2023-10-29 18:28:38 24 4
gpt4 key购买 nike

我是 Python 的新手,目前面临一个我无法解决的问题。我真的希望你能帮助我。英语不是我的母语,所以如果我不能正确表达自己,我很抱歉。

假设我有一个包含两列的简单数据框:

index  Num_Albums  Num_authors
0 10 4
1 1 5
2 4 4
3 7 1000
4 1 44
5 3 8

Num_Abums_tot = sum(Num_Albums) = 30

我需要对 Num_Albums 中的数据进行累加,直到达到某个条件。注册满足条件的索引,并从Num_authors中获取对应的值。

例子:Num_Albums 的累积总和,直到总和等于 30 的 50% ± 1/15 (--> 15±2):

10 = 15±2? No, then continue;
10+1 =15±2? No, then continue
10+1+41 = 15±2? Yes, stop.

在索引 2 处达到条件。然后在该索引处获取 Num_Authors:Num_Authors(2)=4

在我开始考虑如何使用 while/for 循环实现它之前,我想看看是否已经在 pandas 中实现了一个功能....

[我想指定要从中检索相关索引值的列(当我有例如 4 列并且我想对第 1 列中的元素求和时,这会派上用场,条件达到 =yes 然后得到第 2 列中对应的值;然后对第 3 列和第 4 列执行相同的操作)]。

最佳答案

选择 - 1:

您可以使用 cumsum 计算累计和.然后使用 np.isclose使用它的内置公差参数来检查该系列中存在的值是否位于指定的阈值 15 +/- 2 内。这将返回一个 bool 数组。

通过np.flatnonzero ,返回 True 条件成立的索引的序数值。我们选择 True 值的第一个实例。

最后,使用.iloc根据之前计算的索引获取你需要的列名的值。

val = np.flatnonzero(np.isclose(df.Num_Albums.cumsum().values, 15, atol=2))[0]
df['Num_authors'].iloc[val] # for faster access, use .iat
4

series 上执行 np.isclose 后转换为数组时:

np.isclose(df.Num_Albums.cumsum().values, 15, atol=2)
array([False, False, True, False, False, False], dtype=bool)

选择 - 2:

使用pd.Index.get_loccumsum 计算系列上,它还支持 nearest 方法上的 tolerance 参数。

val = pd.Index(df.Num_Albums.cumsum()).get_loc(15, 'nearest', tolerance=2)
df.get_value(val, 'Num_authors')
4

选项 - 3:

使用idxmaxcumsum 上的 subabs 操作后创建的 bool 掩码找到 True 值的第一个索引系列:

df.get_value(df.Num_Albums.cumsum().sub(15).abs().le(2).idxmax(), 'Num_authors')
4

关于Python 数据框 : cumulative sum of column until condition is reached and return the index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41488676/

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