【发布时间】:2020-12-24 16:09:34
【问题描述】:
我有一个包含条件和值的数据框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 中的值 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' 时,它会中断,并且两个文本文件都只包含@ 987654337@.
换句话说,如果我在 IF 语句中指定 conditions 的第一个元素,那么它会按预期工作,但是如果我指定第二个元素,那么它会中断并将
这是怎么回事,我该如何解决?
谢谢!
【问题讨论】:
-
df = df[df['VALUE'] < 3]您在循环中更改了初始数据框 - 那是您的错误
标签: python pandas loops if-statement