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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

元芳怎么了 2023-07-18 10:35:01
我有一個df包含條件和值的數(shù)據(jù)框。import pandas as pddf=pd.DataFrame({'COND':['X','X','X','Y','Y','Y'], 'VALUE':[1,2,3,1,2,3]})因此df看起來像:  COND  VALUE     X      1     X      2     X      3     Y      1     Y      2     Y      3我正在使用循環(huán)df根據(jù)進行子集化COND,并編寫包含每個條件的值的單獨文本文件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é)果是兩個文本文件:X_vals.txt 和 Y_vals.txt,它們都包含1 2 3. 到目前為止,一切都按預(yù)期進行。我想df僅針對一個條件進一步進行子集化。例如,也許我想要條件 Y 中的所有值,但只需要條件 X 中 < 3 的值。在這種情況下, X_vals.txt 應(yīng)包含1 2, Y_vals.txt 應(yīng)包含1 2 3。我嘗試用 IF 語句來實現(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ù)期),但是當我使用if condition=='Y'而不是 時if condition=='X',它會中斷,并且兩個文本文件都只包含1 2.換句話說,如果我conditions在 IF 語句中指定第一個元素,那么它會按預(yù)期工作,但是如果我指定第二個元素,那么它會中斷并將 < 3 子集應(yīng)用于兩個條件中的值。這是怎么回事?我該如何解決?
查看完整描述

3 回答

?
嚕嚕噠

TA貢獻1784條經(jīng)驗 獲得超7個贊

您遇到的問題是因為您df在循環(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讓我有點驚訝的是,當你循環(huán)遍歷你condition = 'Y'首先得到的集合時,然后 condition = 'X'. 但由于集合是無序集合(即它不聲稱其元素具有固有的順序),因此這不應(yīng)該太令人不安:Python 只是以最內(nèi)部方便的方式讀出元素。


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


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


現(xià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)建一個布爾系列用作掩碼更簡潔。


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


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

TA貢獻1776條經(jīng)驗 獲得超12個贊

我們可以編寫條件然后dict使用map過濾之前的 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')


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

TA貢獻1829條經(jīng)驗 獲得超9個贊

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)

您沒有指定變量“條件”,因此它給您一個錯誤。嘗試做:


條件 = df.COND


在for循環(huán)之前


查看完整回答
反對 回復(fù) 2023-07-18
  • 3 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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