我有一个数据框,我需要删除所有重复的行,但是我需要保留第一行和最后一行。
例如:
1 0
2 0
3 0
4 0
输出:
1 0
4 0
我尝试了
df.column.drop_duplicates(keep=("first","last"))
,但它不起作用,返回了以下结果:
ValueError: keep必须是"first"、"last"或False
有人知道解决方法吗?
谢谢
我有一个数据框,我需要删除所有重复的行,但是我需要保留第一行和最后一行。
例如:
1 0
2 0
3 0
4 0
输出:
1 0
4 0
df.column.drop_duplicates(keep=("first","last"))
,但它不起作用,返回了以下结果:
ValueError: keep必须是"first"、"last"或False
有人知道解决方法吗?
谢谢
pd.concat([
df['X'].drop_duplicates(keep='first'),
df['X'].drop_duplicates(keep='last'),
])
你不能删除第一个和最后一个,所以技巧是将第一个和最后一个的数据帧连接起来。
当你连接时,需要处理非重复项的副本。因此,只需在第二个数据框中连接唯一索引即可。 (不确定合并/连接是否更好?)
import pandas as pd
d = {1:0,2:0,10:1, 3:0,4:0}
df = pd.DataFrame.from_dict(d, orient='index', columns=['cnt'])
print(df)
cnt
1 0
2 0
10 1
3 0
4 0
接着做这个:
d1 = df.drop_duplicates(keep=("first"))
d2 = df.drop_duplicates(keep=("last"))
d3 = pd.concat([d1,d2.loc[set(d2.index) - set(d1.index)]])
d3
Out[60]:
cnt
1 0
10 1
4 0
在名为column
的列上使用groupby,然后重新索引。如果您想检查多个列中是否存在重复值,可以扩展您在groupby中包含的列。
df = pd.DataFrame({'column':[0,0,0,0]})
输入:
column
0 0
1 0
2 0
3 0
df.groupby('column', as_index=False).apply(lambda x: x if len(x)==1 else x.iloc[[0, -1]]).reset_index(level=0, drop=True)
输出:
column
0 0
3 0