大熊猫多指标在单柱月 - 日格式
问题描述:
我得有月,日的多指标,然后将数据值单列一大熊猫数据帧,看起来是这样的:大熊猫多指标在单柱月 - 日格式
Data
1 1 6
2 10
3 11
4 12
5 50
...
12 1 3
2 4
3 10
4 11
你明白了。我已经把月份和日期分组了。 我想创建一个新的列,一起格式化Month-Date。但似乎无法弄清楚。 所需的输出会是这个样子:
M-D Data
1-01 6
1-02 10
1-03 11
1-04 14
1-05 50
任何人都可以为此提供最佳的解决方案? 注意:我之前使用下面的代码创建了索引,也许我需要回去做一些重构?我做了这个multiindex,以便我可以找到min()值。最初的“月”和“日”列在10年内有几个月和几天,我只需要这10年中的最小值,因此groupby()。
dframe['Date'] = pd.to_datetime(dframe['Date'])
dframe['Month'], dframe['Day'] = dframe['Date'].dt.month,
dframe['Date'].dt.day
finaldf = dframe.groupby(['Month','Day'])['Data_Value'].min()
df = pd.DataFrame(finaldf)
在此先感谢!
答
如果你需要的月份和日期被格式化为m-d
,然后不给他们从一开始就分开是一种更合理的方法,例如,你可以通过这个变量格式化日期列%m-%d
,组办汇总您需要:
dframe.groupby(pd.to_datetime(dframe['Date']).dt.strftime('%m-%d'))['Data_Value'].min()
简单例子:
dframe = pd.DataFrame({
'Date': ['2017-08-01', '2016-08-01', '2017-08-02'],
'Data_Value': [2,3,4]
})
dframe.groupby(pd.to_datetime(dframe['Date']).dt.strftime('%m-%d'))['Data_Value'].min()
#Date
#08-01 2
#08-02 4
#Name: Data_Value, dtype: int64
答
这是一个有点棘手与多指标的工作,我不知道,这是非常有效的时间,但它的工作原理:
df["M-D"] = [str(df.index[i][0])+'-'+str(df.index[i][1]) for i in range(len(df))]
它提供了以下结果:
In[143]: df.head()
Out[143]:
Open New_date
Month Day
1 1 9597 1-1
2 9370 1-2
3 9365 1-3
4 9766 1-4
5 9446 1-5
答
我会请@ Psidom的建议。但是,要解决有人问这样的问题:
我会使用format
df.assign(**{'M-D': df.index.map('{0[0]}-{0[1]}'.format).rename('M-D')})
Data M-D
1 1 6 1-1
2 10 1-2
3 11 1-3
4 12 1-4
5 50 1-5
12 1 3 12-1
2 4 12-2
3 10 12-3
4 11 12-4
设置
df = pd.DataFrame(dict(
Data=[6, 10, 11, 12, 50, 3, 4, 10, 11],
), [[1] * 5 + [12] * 4, list(range(1, 6)) + list(range(1, 5))])
这个工作完全我需要它的方式。这是我第一次使用这么大数量的日期时间数据,所以非常感谢。 –