如果dataframe.tail(1)是X,请执行某些操作

时间:2020-01-29 15:32:41

标签: python pandas

我正在尝试检查pandas数据框列中的最后一个单元格是否包含1或2(这些是唯一的选项)。如果它是1,我想删除整行,如果它是2,但是我想保留它。

import pandas as pd

df1 = pd.DataFrame({'number':[1,2,1,2,1], 'name': ['bill','mary','john','sarah','tom']})
df2 = pd.DataFrame({'number':[1,2,1,2,1,2], 'name': ['bill','mary','john','sarah','tom','sam']})

在上面的示例中,我想删除df1的最后一行(所以最后一行是'sarah'),但是在df2中,我希望保持原样。

到目前为止,我已经考虑过尝试以下方法,但出现错误

if df1['number'].tail(1) == 1:
    df = df.drop(-1)

4 个答案:

答案 0 :(得分:3)

DataFrame.drop会基于标签(索引的实际值)删除行。尽管可以使用df1.drop(df1.index[-1]),但是对于重复的索引却存在问题。可以使用iloc选择最后一行,也可以使用.iat

选择单个值
if df1['number'].iat[-1] == 1:
    df1 = df1.iloc[:-1, :]

答案 1 :(得分:2)

您可以检查最后一行@Service @Slf4j @Transactional @KafkaListener(containerFactory = "containerFactory", topics = { "myTopic" }) public class ContractListeners { @KafkaHandler public void init(ConsumerRecord<String, ContractRequestDto> record, @Payload ContractRequestDto object) { ... } } 的值是否等于1:

number

如果该条件成立,则可以选择除最后一行以外的所有行,并将其分配回check = df1['number'].tail(1).values == 1 # Or check entire row with # check = 1 in df1.tail(1).values

df1

答案 2 :(得分:0)

if df1.tail(1).number == 1:
    df1.drop(len(df1)-1, inplace = True)

答案 3 :(得分:-2)

您可以使用相同的尾函数

df.drop(df.tail(n).index,inplace=True) # drop last n rows