【发布时间】:2020-02-07 18:38:16
【问题描述】:
我有一个数据框,其中包含三个系列,称为日期、元素、 和 Data_Value——它们的类型是字符串、字符串和 numpy.int64 分别。 Date 的日期格式为 yyyy-mm-dd;元素有 表示 TMIN 或 TMAX 的字符串,它表示是否 Data_Value 是特定日期的最低或最高温度; 最后,Data_Value 系列仅代表实际温度。
日期系列有多个相同日期的重复项。例如。为了 日期 2005-01-01,温度列有 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
我只想要一个数据框,其中包含每个唯一日期以及当天的最高温度。
【问题讨论】:
-
df.groupby("Date").max()你的意思是? -
这听起来可能很奇怪,但我认为你放的太多了,这让人不知所措。我们希望看到一个简单的输入 df 和预期的输出 df。帮助更容易
-
@Kenan 我添加了 TL;DR 版本。让我知道这是否有助于澄清它。
标签: python pandas dataframe series