达到总条件后的滴行



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

示例数据集:

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的答案(

最新更新