簡體   English   中英

Pandas 數據框 - 將列相加到預先給定的值,返回索引

[英]Pandas dataframe - Sum columns up to a pre given value, return index

我使用熊貓數據框,但無法弄清楚這個問題:

我想我可能需要一些 for 循環,但我被困在這個循環中!

如果 A 列中自下而上的總和為 28,我想返回總和為 28 的索引。在此示例中,它將是 10+7+11 = 28,並且索引(日期)為 5。所以我想退貨 5.

日期__A
0_____11
1_____9
2_____10
3_____8
4_____2
5_____11
6_____7
7_____10

使用以下 df:

 df = pd.DataFrame({'Date':[0, 1, 2, 3, 4, 5, 6, 7],
                       'A':[11, 9, 10, 8, 2, 11, 7, 10]})
    
 df = df.set_index('Date')

您可以通過反轉數據框找到反向累積總和。 然后,您可以反轉此列表,並將其作為另一列添加到原始數據框中:

cumsum = df[::-1].cumsum()['A'].to_list()
cumsum.reverse()
df['cumsum'] = cumsum

然后你可以得到 df 子集的第一個索引,其中 cumsum <=28(如果它沒有精確地添加到 28,這將返回最接近的索引,其中和 <28)。

 index = df.loc[df['cumsum'] <= 28].first_valid_index()

用:

import pandas as pd

# setup
df = pd.DataFrame.from_dict({'Date': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7},
                             'A': {0: 11, 1: 9, 2: 10, 3: 8, 4: 2, 5: 11, 6: 7, 7: 10}})

res = df.iloc[::-1, 1].cumsum().eq(28).idxmax()
print(res)

輸出

5

從計算臨時Series 開始

wrk = df.set_index('Date').A

要計算“想要”元素的索引,從頂部開始計數,運行:

res = wrk[wrk.cumsum() == 28]
iFirst = res.index[0] if res.size > 0 else np.nan

要從底部計算索引,您還應該從底部計算cummsum

res = wrk[wrk[::-1].cumsum() == 28]
iLast = res.index[-1] if res.size > 0 else np.nan

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM