Pandas数据帧:保持行重复

问题描述 投票:3回答:1

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

我现在有两列“value1”,“value2”,而不是一个“值”列。

         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

我认为这应该有效,但它看起来真的很简单,特别是我实际上需要为大型数据集执行此操作。知道如何解决这个问题吗?

python python-3.x pandas duplicates
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.