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))

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')

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)之前
添加回答
舉報(bào)