达到条件条件后删除行

时间:2018-02-18 07:48:30

标签: python python-3.x pandas dataframe

我想在达到某个值后从数据框中删除行。

示例数据集:

num value 
1   2000
2   3000
3   2000

x = 5000 # my limiter
y = 0 # my bucket for values

# I want to do something like...
for row in df:
    if y <= x:
        y =+ df["Values"]
    elif y > x:
        df.drop(row)
        continue

elif可能没有意义,但它表达了这个想法,这是我更关心的解析。我似乎无法在我的嵌入式if语句中使用df [“Values”]。

我收到错误:

 ValueError: The truth value of a Series is ambiguous.

这很奇怪,因为我可以在if语句之外单独运行这一行。

2 个答案:

答案 0 :(得分:1)

boolean indexing使用cumsum

x = 5000
df = df[df['value'].cumsum() <= x]
print (df)
   num  value
0    1   2000
1    2   3000

<强>详细

print (df['value'].cumsum())
0    2000
1    5000
2    7000
Name: value, dtype: int64

print (df['value'].cumsum() <= x)
0     True
1     True
2    False
Name: value, dtype: bool

答案 1 :(得分:0)

您收到此错误消息,因为您将整个列分配给变量y。相反,您只想分配列value中的值并将其添加到变量中。

#print(df)
#num value 
#1   2000
#2   3000
#3   2000
#4   4000
#5   1000

x = 5000 
y = 0 

#iterate over rows
for index, row in df.iterrows():
    if y < x:
        #add the value to y
        y += row["value"]
    elif y >= x:
        #drop rest of the dataframe
        df = df.drop(df.index[index:])
        break

#output from print(df)
#   num  value
#0    1   2000
#1    2   3000

但如果你刚刚使用pandas内置cumsum功能,它会更快。 (see jezrael's answer for details