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

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

Python:循環(huán)中 IF 語(yǔ)句的處理不一致

Python:循環(huán)中 IF 語(yǔ)句的處理不一致

元芳怎么了 2023-07-18 10:35:01
我有一個(gè)df包含條件和值的數(shù)據(jù)框。import pandas as pddf=pd.DataFrame({'COND':['X','X','X','Y','Y','Y'], 'VALUE':[1,2,3,1,2,3]})因此df看起來(lái)像:  COND  VALUE     X      1     X      2     X      3     Y      1     Y      2     Y      3我正在使用循環(huán)df根據(jù)進(jìn)行子集化COND,并編寫(xiě)包含每個(gè)條件的值的單獨(dú)文本文件conditions = {'X','Y'}for condition in conditions:    df2 = df[df['COND'].isin([condition])][['VALUE']]    df2.to_csv(condition + '_values.txt', header=False, index=False)最終結(jié)果是兩個(gè)文本文件:X_vals.txt 和 Y_vals.txt,它們都包含1 2 3. 到目前為止,一切都按預(yù)期進(jìn)行。我想df僅針對(duì)一個(gè)條件進(jìn)一步進(jìn)行子集化。例如,也許我想要條件 Y 中的所有值,但只需要條件 X 中 < 3 的值。在這種情況下, X_vals.txt 應(yīng)包含1 2, Y_vals.txt 應(yīng)包含1 2 3。我嘗試用 IF 語(yǔ)句來(lái)實(shí)現(xiàn):conditions = {'X','Y'}for condition in conditions:    if condition == 'X':        df = df[df['VALUE'] < 3]    df2 = df[df['COND'].isin([condition])][['VALUE']]    df2.to_csv(condition + '_values.txt', header=False, index=False)這就是不一致的地方。上面的代碼工作正常(即 X_vals.txt 包含1 2, 和 Y_vals.txt 1 2 3,按預(yù)期),但是當(dāng)我使用if condition=='Y'而不是 時(shí)if condition=='X',它會(huì)中斷,并且兩個(gè)文本文件都只包含1 2.換句話(huà)說(shuō),如果我conditions在 IF 語(yǔ)句中指定第一個(gè)元素,那么它會(huì)按預(yù)期工作,但是如果我指定第二個(gè)元素,那么它會(huì)中斷并將 < 3 子集應(yīng)用于兩個(gè)條件中的值。這是怎么回事?我該如何解決?
查看完整描述

3 回答

?
嚕嚕噠

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

您遇到的問(wèn)題是因?yàn)槟鷇f在循環(huán)內(nèi)覆蓋而出現(xiàn)的。


conditions = {'X','Y'}

for condition in conditions:

    if condition == 'X':

        df = df[df['VALUE'] < 3]  # <-- HERE'S YOUR ISSUE


    df2 = df[df['COND'].isin([condition])][['VALUE']]

    df2.to_csv(condition + '_values.txt', header=False, index=False)

conditions讓我有點(diǎn)驚訝的是,當(dāng)你循環(huán)遍歷你condition = 'Y'首先得到的集合時(shí),然后 condition = 'X'. 但由于集合是無(wú)序集合(即它不聲稱(chēng)其元素具有固有的順序),因此這不應(yīng)該太令人不安:Python 只是以最內(nèi)部方便的方式讀出元素。


您可以使用conditions = ['X', 'Y']循環(huán)列表(有序集合)來(lái)代替。然后它會(huì)先執(zhí)行 X,然后執(zhí)行 Y。但是,如果您這樣做,您將得到相同的錯(cuò)誤,但方向相反(即它適用于if condition == 'Y'但不適用于if condition == 'X')。


這是因?yàn)檠h(huán)運(yùn)行一次后,df已被重新分配給原來(lái)df僅包含小于三的值的子集。if condition這就是為什么如果語(yǔ)句在第一次循環(huán)時(shí)觸發(fā),則兩個(gè)文件中僅獲得值 1 和 2 的原因。


現(xiàn)在進(jìn)行修復(fù):



conditions = ['X', 'Y']


for condition in conditions:


    csv_name = f"{condition}_values.txt"


    if condition == 'X':

        df_filter = f"VALUE < 3 & COND == '{condition}'"

    else:

        df_filter = f"COND == '{condition}'"


    df.query(df_filter).VALUE.to_csv(csv_name, header=False, index=False)

在這里,我介紹了該DataFrame.query方法,該方法通常比嘗試創(chuàng)建一個(gè)布爾系列用作掩碼更簡(jiǎn)潔。


f 字符串語(yǔ)法僅適用于 python 3.6+,如果您使用的是較低版本,請(qǐng)進(jìn)行適當(dāng)修改(例如df_filter = "COND == '{}'".format(condition))


查看完整回答
反對(duì) 回復(fù) 2023-07-18
?
叮當(dāng)貓咪

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

我們可以編寫(xiě)條件然后dict使用map過(guò)濾之前的 dfgroupby


cond = {'X' : 2, 'Y' : 3}

subdf = df[df['VALUE']<df.COND.map(cond)]

for x, y in subdf.groupby('COND'):

    y.to_csv(x + '_values.txt')


查看完整回答
反對(duì) 回復(fù) 2023-07-18
?
PIPIONE

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

df=pd.DataFrame({'COND':['X','X','X','Y','Y','Y'], 'VALUE':[1,2,3,1,2,3]})


conditions = df.COND


for condition in conditions:

 print(condition)

 df2=df[df['COND'].isin([condition])][['VALUE']]

 df2.to_csv(condition + '_values.txt',header=False, index=False)



for condition in conditions:

 if condition=='X':

     df=df[df['VALUE'] < 3]


 df2=df[df['COND'].isin([condition])][['VALUE']]

 df2.to_csv(condition + '_values.txt',header=False, index=False)

您沒(méi)有指定變量“條件”,因此它給您一個(gè)錯(cuò)誤。嘗試做:


條件 = df.COND


在for循環(huán)之前


查看完整回答
反對(duì) 回復(fù) 2023-07-18
  • 3 回答
  • 0 關(guān)注
  • 199 瀏覽
慕課專(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)