Pandas-如何根据其他系列删除重复项?

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

我有一个包含三个系列的数据框,分别称为日期,元素,和Data_Value-它们的类型是字符串,字符串和numpy.int64分别。日期的日期格式为yyyy-mm-dd;元素有表示TMIN或TMAX的字符串,它表示是否Data_Value是特定日期的最低或最高温度;最后,Data_Value系列仅代表实际温度。

日期系列具有同一日期的多个重复项。例如。为了日期为2005年1月1日,温度列有19个条目,值从28开始,一直上升到156。我想创建一个仅包含日期和最高温度的新数据框-我将最终也想要一个TMIN值,但是我认为如果可以的话我可以找出另一个。我将发布一些伪代码以下说明以显示到目前为止我已经尝试过的内容。

到目前为止,我已经提取了csv并将其分配给变量df。然后我按日期,元素和温度对值进行排序(数据值)。之后,我创建了一个名为tmax的变量必要的日期(我只需要2005-2014年的数据)“ TMAX”作为其元素值。我将tmax投射到新的DataFrame中,重置它的索引摆脱第一个无用的索引数据数据框,并删除了“元素”列,因为它在这点。现在,我(最终)正在尝试创建所有TMAX的温度,这样我就可以用pyplot将其绘制出来。但是我不能弄清楚我的一生如何将数据帧减少到单一日期和该日期的最大值。如果我能得到那我可以轻松地将系列转换为列表并进行绘制。


    def record_high_and_low_temperatures():
        #read in csv
        df = pd.read_csv('somedata.csv') 

        #sort values so they're in a nice order
        df.sort_values(by=['Date', 'Element', 'Data_Value'], inplace=True) 

        # grab all entries for TMAX in correct date range
        tmax = df[(df['Element'] == 'TMAX') & (df['Date'].between("2005-01-01", "2014-12-31"))]

        # cast to dataframe
        tmax = pd.DataFrame(tmax, columns=['Date', 'Data_Value'])

        # Remove index column from previous dataframe
        tmax.reset_index(drop=True, inplace=True)

        # this is where I'm stuck, how do I get the max value per unique date? 
        max_temp_by_date = tmax.loc[tmax['Data_Value'].idxmax()]

感谢您的协助,如果需要澄清,请告诉我。

TL; DR:好...输入数据框看起来像

date     | data_value
2005-01-01    28
2005-01-01    33
2005-01-01    33
2005-01-01    44
2005-01-01    56
2005-01-02    0
2005-01-02    12
2005-01-02    30
2005-01-02    28
2005-01-02    22

预期的df应该看起来像:

date     | data_value
2005-01-01    79
2005-01-02    90
2005-01-03    88
2005-01-04    44
2005-01-05    63

我只想要一个数据框,该数据框具有每个唯一的日期以及当天的最高温度。

python pandas dataframe series
1个回答
0
投票

尝试一下:

df.groupby("Date")['data_value'].max()
© www.soinside.com 2019 - 2024. All rights reserved.