在数据帧熊猫中按最大周期分组的问题

时间:2020-08-01 14:28:58

标签: python pandas dataframe

我仍然是python的新手,在尝试对一些数据进行分组以显示具有最高(最大)日期的记录时遇到问题,数据框如下:

enter image description here ... enter image description here

我正在尝试以下操作:

df_2 = df.max(axis = 0) 
df_2 = df.periodo.max()
df_2 = df.loc[df.groupby('periodo').periodo.idxmax()]

它给了我回报:

Timestamp('2020-06-01 00:00:00')

periodo    2020-06-01 00:00:00
valor                  3.49136 

尽管'periodo'的值是正确的,但对于'valor'则不是,因为我需要获得相应的完整记录('period'和'value'),而不是每个记录的最大值。我尝试了其他方法,但无法达到想要的目标...

我需要做什么?

在此先感谢您,我将竭诚为您解答!

致谢!

2 个答案:

答案 0 :(得分:3)

# import packages we need, seed random number generator
import pandas as pd
import datetime
import random
random.seed(1)

创建示例数据框

dates = [single_date for single_date in (start_date + datetime.timedelta(n) for n in range(day_count))]
values = [random.randint(1,1000) for _ in dates]
df = pd.DataFrame(zip(dates,values),columns=['dates','values'])

df将是:

    dates    values
0   2020-01-01  389
1   2020-01-02  808
2   2020-01-03  215
3   2020-01-04  97
4   2020-01-05  500
5   2020-01-06  30
6   2020-01-07  915
7   2020-01-08  856
8   2020-01-09  400
9   2020-01-10  444

选择每列中条目数最高的行

您可以这样做:

df[df['dates'] == df['dates'].max()]

(或者,如果要使用idxmax,可以这样做:df.loc[[df['dates'].idxmax()]]

返回:

    dates   values
9   2020-01-10  444

即这是最新日期的行

df[df['values'] == df['values'].max()]

(或者,如果想再次使用idxmax,可以这样做:df.loc[[df['values'].idxmax()]]-与Scott Bostonanswer一样。)

    dates   values
6   2020-01-07  915

即这是values列中具有最高值的行

Reference

答案 1 :(得分:2)

我认为您需要类似的东西

df.loc[[df['valor'].idxmax()]]

在“值”列上使用idxmax的位置。然后使用该索引选择该行。

MVCE:

import pandas as pd
import numpy as np

np.random.seed(123)
df = pd.DataFrame({'periodo':pd.date_range('2018-07-01', periods = 600, freq='d'), 
                  'valor':np.random.random(600)+3})

df.loc[[df['valor'].idxmax()]]

输出:

       periodo     valor
474 2019-10-18  3.998918