python - Pandas 数据框 : keep rows with duplicates

标签 python python-3.x pandas duplicates

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

我现在有两列“valu1”、“valu2”,而不是一个“valu”列:

         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

我认为这应该可行,但它确实看起来并不复杂,尤其是我实际上需要对大型数据集执行此操作。知道我应该如何解决这个问题吗?

最佳答案

我觉得你在找

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

关于python - Pandas 数据框 : keep rows with duplicates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55770083/

相关文章:

python - FacetGrid 上的 Seaborn 颜色条用于具有标准化颜色映射的 histplot

python - Pandas 有条件创建新的数据框列

python - 如何使用azureml中上传到pandas的数据集进行分析?

python - 扩展中的 fatal error : PyThreadState_Get: no current thread

python - 有没有更优雅的方法来过滤函数的失败结果?

python - 使用色调选项从 pandas db 和seaborn 的 fiddle 图制作多个图

python - 如何处理跨多个模块的 Redis 连接?

python - 一列中每次出现的值在另一列中的总和

python - 如何获得项目的计数字典但保持它们出现的顺序?

python - 删除 Pandas 中的单个和一系列列