我有以下数据框df
Index time block cell
0 9 25 c1
1 9 25 c1
2 33 35 c2
3 47 4 c1
4 47 17 c2
5 100 21 c1
6 120 21 c1
7 120 36 c2
要根据时间列删除重复项。但是,有一个条件: -如果两个或两个以上相似时间具有相同的单元格,例如,索引0和索引1具有c1 然后保留任何列。 -如果两个或两个以上相似时间的单元格不同,例如索引3和4以及索引6和7,则保留所有行对应重复的时间
结果数据帧如下:df_result =
Index time block cell
0 9 25 c1
2 33 35 c2
3 47 4 c1
4 47 17 c2
5 100 21 c1
6 120 21 c1
7 120 36 c2
尝试过
df.drop_duplicates('time')
答案 0 :(得分:1)
您可以通过将原始DataFrame分为多个类别,然后在每个类别中运行drop_duplicates()
来实现。
import pandas as pd
df = pd.DataFrame({'time':[9,9,33,47,47,100,120,120],'block':[25,25,35,4,17,21,21,36],'cell':'c1;c1;c2;c1;c2;c1;c1;c2'.split(';')})
categories = df['cell'].astype('category').unique()
df2 = pd.DataFrame()
for category in categories:
df2 = pd.concat([df2, df[df['cell'] == category].drop_duplicates(keep='first')])
df2 = df2.sort_index()
这将导致df2
被
time block cell
0 9 25 c1
2 33 35 c2
3 47 4 c1
4 47 17 c2
5 100 21 c1
6 120 21 c1
7 120 36 c2
答案 1 :(得分:0)
您可以按所需列之一进行分组,然后将重复项放在另一列上,如下所示:
df = pd.DataFrame({'time':[9,9,33,47,47,100,120,120],'block':[25,25,35,4,17,21,21,36],'cell': ['c1','c1','c2','c1','c2','c1','c1','c2']})
grouped = df.groupby('time')
final_df = pd.DataFrame({'time':[] ,'block':[],'cell':[]})
for ind, gr in grouped:
final_df = final_df.append(gr.drop_duplicates("cell"))