我是一个新手还在试图找出熊猫 - 分裂/应用/组合只是开始有意义但我还没有。
我试图从前几年(2013-2015)的同一天获得历史高点和低点的销售电话号码,然后又有一列告诉我2016年的电话会话比以前的高点更高或低于之前的低点以及价值观。
这是我到目前为止的尝试:
df = pd.read_csv('filename.csv')
df['Date'] = pd.to_datetime(df['Date'])
df = df[(df['Date']>= '01/01/2013') & (df['Date'] <= '12/31/2015')]
df['Month'] = df.Date.dt.month
df['Day'] = df.Date.dt.day
dfMAX = df[df['Element'] == "MAX"]
dfMAX = (dfMAX.groupby([dfMAX.Date.dt.month, dfMAX.Date.dt.day, 'Element'])
[['Data_Value']]
.agg(['max']))
这让我获得了每天的最大值,我知道我可以为最小值重复这个。我很难知道如何将它与多指数重新组合,然后如何获得高于或低于已记录的最小值/最大值的2016年值。
我并不担心闰年数据,因此可以放弃/忽略2月29日。
输出将是这样的:
Day of Year Min Max 2016
1/1 50 1900
1/2 23 2100 2102
1/3 90 1800 85
1/4 89 1750
1/5 50 2309 45
1/6 44 5600 5649
我在这里发布了一个csv文件: https://drive.google.com/open?id=0B4xdnV0LFZI1dUE3ZFBxdWFQOGc
感谢您的帮助, 我
答案 0 :(得分:3)
我会按照以下步骤解决这个问题:
.dt.dayofyear
。groupby
与.agg
一起使用
最小值和最大值,以获得2013年至2015年的最小值和最大值,以创建一个
数据帧每日记录。pd.merge
,您可以在2016年设置索引和
使用left_index=True
和right_index=True
合并索引。你应该用你的数据得到这样的东西:
min max Date Element Value
DayofYear
1 545 1812 2016-01-01 MAX 1887
3 108 1815 2016-01-03 MAX 1906
4 496 1618 2016-01-04 MAX 1701
6 455 1864 2016-01-06 MIN 169
8 511 1771 2016-01-08 MIN 232
请在下方看到我的剧透代码。
df = pd.read_csv(&#39; Downloads / Day_Over_Day.csv&#39;,parse_dates = [&#39; Date&#39;])
。
1. df [&#39; DayofYear&#39;] = df [&#39; Date&#39;]。dt.dayofyear
2A。 df_13_15 = df.query(&#39;日期&lt;&#34; 2016-01-01&#34;&#39;)
2B。 df_2016 = df.query(&#39;日期&gt; =&#34; 2016-01-01&#34;&#39;)
3.&amp; 4. df_Overlay = pd.merge(df_13_15.groupby(&#39; DayofYear&#39;)[&#39;价值&#39;]。agg([&#39; min&#39;,&#39; max&# 39;]),df_2016.set_index(&#39; DayofYear&#39;),left_index = True,right_index = True)
5. print(df_Overlay [(df_Overlay [&#39; Value&#39;]&lt; df_Overlay [&#39; min&#39;])|(df_Overlay [&#39; Value&#39;]&gt; df_Overlay [& #39;最大&#39;])]头())