gpt4 book ai didi

python - Pandas 数据框 : keep rows with duplicates

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:48 24 4
gpt4 key购买 nike

这个问题比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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com