繁体   English   中英

从多索引熊猫系列创建1列数据框

[英]Create 1-column dataframe from multi-index pandas series

我有一个像这样的多索引系列:

Year  Month
2012  1        444
      2        222
      3        333
      4        1101

我想变成:

Date      Value
2012-01   444
2012-02   222
2012-03   333
2012-04   1101

画一条线。

我已经尝试了series.unstack(level=0)series.unstack(level=1) ,但这会创建一个矩阵

In[1]: series.unstack(level=0)
Out[1]: 
Year   2012  2013  2014  2015  2016  2017   2018
Month                                          
1      444  ...   ...   ...   ...   ...    ...
2      222  ...   ...   ...   ...   ...    ...
3      333  ...   ...   ...   ...   ...    ...
4      1101 ...   ...   ...   ...   ...    ...

我想念什么?

如果还添加了“ Day列,请使用Index.to_frameto_datetime一起工作,然后重新分配:

s.index = pd.to_datetime(s.index.to_frame().assign(Day=1))
print (s)
2012-01-01     444
2012-02-01     222
2012-03-01     333
2012-04-01    1101
Name: a, dtype: int64

对于一列DataFrame使用Series.to_frame

df1 = s.to_frame('Value')
print (df1)
            Value
2012-01-01    444
2012-02-01    222
2012-03-01    333
2012-04-01   1101

如果需要PeriodIndex添加Series.dt.to_period

s.index = pd.to_datetime(s.index.to_frame().assign(Day=1)).dt.to_period('m')
print (s)
2012-01     444
2012-02     222
2012-03     333
2012-04    1101
Freq: M, Name: a, dtype: int64

df2 = s.to_frame('Value')
print (df2)
         Value
2012-01    444
2012-02    222
2012-03    333
2012-04   1101
idx = pd.PeriodIndex(
    year=s.index.get_level_values(0).tolist(), 
    month=s.index.get_level_values(1).tolist(), 
    freq='M', 
    name='Date'
)
s2 = pd.Series(s.values, index=idx, name=s.name)
s2.plot()

您还可以使用带有f字符串的列表推导来创建DatetimeIndex。

idx = pd.to_datetime([f'{year}-{month}' for year, month in s.index])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM