我正在尝试检查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)
答案 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