Pandas数据帧:保持行重复
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas数据帧:保持行重复相关的知识,希望对你有一定的参考价值。
这个问题比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_duplicates
与keep='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
以上是关于Pandas数据帧:保持行重复的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pandas 时如何打印多达 3,000 行数据框 [重复]