熊猫数据框:保留重复的行

时间:2019-04-20 03:49:43

标签: python python-3.x pandas duplicates

这个问题比Remove duplicate rows in pandas dataframe based on condition稍微复杂:

我现在有两列“ valu1”,“ valu2”:

         t    valu1    valu2
2015-08-01        1       10
2015-08-01        2       11
2015-08-01        3       12
2015-09-31        4       15
2015-10-31        5       13

在上面的数据框中,我想通过保留't'列中具有较高值而在valu1列中具有较低值的行来删除重复的行(即重复列value2的行) t valu1 valu2 2015-08-01 3 10 2015-09-31 4 15 2015-10-31 5 13 列。

预期结果:

df.sort_values()

链接问题中提到的drop_duplicateskeep='last'以及#Let's call the dataframe df dups = df[df['t'].duplicated()]['t'].drop_duplicates() #get duplicated dates for d in dups: max_v1 = df[df['t'] == d]['valu1'].max() #find the max of valu1 on day d min_v2 = df[df['t'] == d]['valu2'].min() #find the min of valu2 on day d df[df['t'] == d]['valu1'] = max_v1 #set valu1 of day d to max_v1 df[df['t'] == d]['valu2'] = min_v2 #set valu2 of day d to min_v2 df = df[~df.index.duplicated()] #drop everything duplicated 显然不起作用。

我现在想到的是:

var a = {}; 
a.test1 = []; 
a.test1.push(1);

我认为这应该可行,但实际上似乎并不复杂,尤其是对于大型数据集,我确实需要这样做。关于如何解决这个问题有任何想法吗?

1 个答案:

答案 0 :(得分:5)

我认为您正在寻找

df.groupby('t').agg({'valu1':'max','valu2':'min'}).reset_index()
            t  valu1  valu2
0  2015-08-01      3     10
1  2015-09-31      4     15
2  2015-10-31      5     13