我想在达到一些值后从数据框中删除行。
示例数据集:
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
埃利夫可能没有意义,但它表达了这个想法,这是我更关心的解析。我似乎无法在我的嵌入式if语句中使用df [" value"]。
我得到错误:
ValueError: The truth value of a Series is ambiguous.
这很奇怪,因为我可以在if语句之外自行运行此行。
与cumsum
使用boolean indexing
:
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
您会收到此错误消息,因为您将整列分配给变量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 indentin cumsum
功能,它会更快。(有关详细信息,请参见Jezrael的答案(