第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

迭代 df 行并分別對(duì)兩列求和,直到其中一列滿(mǎn)足條件

迭代 df 行并分別對(duì)兩列求和,直到其中一列滿(mǎn)足條件

慕尼黑5688855 2023-11-09 21:40:51
我肯定仍在學(xué)習(xí) python,并嘗試了無(wú)數(shù)的方法,但無(wú)法弄清楚這一點(diǎn)。我有一個(gè)包含 2 列的數(shù)據(jù)框,將它們稱(chēng)為 A 和 B。我需要返回一個(gè) df,它將獨(dú)立地對(duì)這兩列中每一列的行值求和,直到 A 的閾值總和超過(guò)某個(gè)值,在本例中假設(shè)為 10。到目前為止,我正在嘗試使用 iterrows() 并可以根據(jù) A >= 10 獲取分段,但在滿(mǎn)足閾值之前似乎無(wú)法解決行求和。即使最終 A 值不滿(mǎn)足條件閾值,所得 df 也必須是詳盡的 - 請(qǐng)參閱所需輸出的最后一行。    df1 = pd.DataFrame(data = [[20,16],[10,5],[3,2],[1,1],[12,10],[9,7],[6,6],[5,2]],columns=['A','B'])    df1        A   B    0   20  16    1   10  5    2   3   2    3   1   1    4   12  10    5   9   7    6   6   6    7   5   2期望的結(jié)果:        A   B    0   20  16    1   10  5    2   16  13    3   15  13    4   5   2預(yù)先感謝您,花費(fèi)了很多時(shí)間,非常感謝您的幫助!干杯
查看完整描述

2 回答

?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊

我很少為 pandas 編寫(xiě)長(zhǎng)循環(huán),但我沒(méi)有找到使用 pandas 方法來(lái)執(zhí)行此操作的方法。試試這個(gè)可怕的循環(huán):(:

  1. 我創(chuàng)建的變量t本質(zhì)上是檢查累積和是否> n(我們將其設(shè)置為10)。然后,我們決定使用,即數(shù)據(jù)框中任何給定行的t累積值或值(并且與 B 列的相同值并行)。iju

  2. 有一些條件,所以有一些elif語(yǔ)句,并且按照我設(shè)置的方式,最后一行會(huì)有不同的行為,所以我必須對(duì)最后一行有一些單獨(dú)的邏輯 - 否則if最后一個(gè)值不會(huì)得到附:

import pandas as pd

df1 = pd.DataFrame(data = [[20,16],[10,5],[3,2],[1,1],[12,10],[9,7],[6,6],[5,2]],columns=['A','B'])

df1


a,b = [],[]

t,u,count = 0,0,0

n=10

for (i,j) in zip(df1['A'], df1['B']):

    count+=1

    if i < n and t >= n:

        a.append(t)

        b.append(u)

        t = i

        u = j

    elif 0 < t < n:

        t += i

        u += j

    elif i < n and t == 0:

        t += i

        u += j

    else:

        t = 0

        u = 0

        a.append(i)

        b.append(j)

    if count == len(df1['A']):

        if t == i or t == 0:

            a.append(i)

            b.append(j)

        elif t > 0 and t != i:

            t += i

            u += j

            a.append(t)

            b.append(u)

df2 = pd.DataFrame({'A' : a, 'B' : b})

df2


查看完整回答
反對(duì) 回復(fù) 2023-11-09
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

這是一個(gè)更短的有效方法:


import pandas as pd


df1 = pd.DataFrame(data = [[20,16],[10,5],[3,2],[1,1],[12,10],[9,7],[6,6],[5,2]],columns=['A','B'])

df2 = pd.DataFrame()

index = 0

while index < df1.size/2:

    if df1.iloc[index]['A'] >= 10:

        a = df1.iloc[index]['A']

        b = df1.iloc[index]['B']

        temp_df = pd.DataFrame(data=[[a,b]], columns=['A','B'])

        df2 = df2.append(temp_df, ignore_index=True)

        index += 1

    else:

        a_sum = 0

        b_sum = 0

        while a_sum < 10 and index < df1.size/2:

            a_sum += df1.iloc[index]['A']

            b_sum += df1.iloc[index]['B']

            index += 1

        if a_sum >= 10:

            temp_df = pd.DataFrame(data=[[a_sum,b_sum]], columns=['A','B'])

            df2 = df2.append(temp_df, ignore_index=True)

        else:

            a = df1.iloc[index-1]['A']

            b = df1.iloc[index-1]['B']

            temp_df = pd.DataFrame(data=[[a,b]], columns=['A','B'])

            df2 = df2.append(temp_df, ignore_index=True)

關(guān)鍵是跟蹤您在 DataFrame 中的位置并跟蹤總和。不要害怕使用變量。


在 Pandas 中,使用 iloc 按索引訪(fǎng)問(wèn)每一行。通過(guò)檢查大小來(lái)確保不會(huì)超出 DataFrame 范圍。df.size 返回元素的數(shù)量,因此它將行乘以列。這就是為什么我將大小除以列數(shù)以獲得實(shí)際行數(shù)。


查看完整回答
反對(duì) 回復(fù) 2023-11-09
  • 2 回答
  • 0 關(guān)注
  • 241 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)