我想在达到某个值后从数据框中删除行。
示例数据集:
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语句之外单独运行这一行。
答案 0 :(得分:1)
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)