我有一个名为df
的数据框,其中包含条件和值。
import pandas as pd
df=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
我使用循环根据COND
来对df
进行子集划分,并编写单独的文本文件,包含每个条件的值。
conditions = {'X','Y'}
for condition in conditions:
df2 = df[df['COND'].isin([condition])][['VALUE']]
df2.to_csv(condition + '_values.txt', header=False, index=False)
最终结果是两个文本文件:X_vals.txt和Y_vals.txt,它们都包含
1 2 3
。截至目前为止,一切都按预期工作。我想进一步对
df
进行子集筛选,只考虑一个条件。例如,也许我只希望从条件Y中获取所有值,但仅从条件X中获取小于3的值。在这种情况下,X_vals.txt应包含1 2
,而Y_vals.txt应包含1 2 3
。我尝试使用IF语句实现这一点: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
,正如预期的那样),但是当我使用if condition=='Y'
而不是if condition=='X'
时,它就会出错,两个文本文件都只包含1 2
。
换句话说,如果在IF语句中指定conditions
的第一个元素,则它将按预期工作,然而如果指定第二个元素,则它将应用于来自两个条件的值的< 3子集。
这里发生了什么,我该如何解决呢?
谢谢!