Pandas reset index on series to remove multiindex

前端 未结 2 903
南笙
南笙 2020-12-02 18:56

I created a Series from a DataFrame, when I resampled some data with a count like so: where H2 is a DataFrame:

         


        
相关标签:
2条回答
  • 2020-12-02 19:23

    When you use double brackets, such as

    H3 = H2[['SOLD_PRICE']]
    

    H3 becomes a DataFrame. If you use single brackets,

    H3 = H2['SOLD_PRICE']
    

    then H3 becomes a Series. If H3 is a Series, then the result you desire follows naturally:

    import pandas as pd
    import numpy as np
    rng = pd.date_range('1/1/2011', periods=72, freq='M')
    H2 = pd.DataFrame(np.arange(len(rng)), index=rng, columns=['SOLD_PRICE'])
    H3 = H2['SOLD_PRICE']
    H5 = H3.resample('Q', how='count')
    H6 = pd.rolling_mean(H5,4)
    print(H6.head())
    

    yields

    2011-03-31   NaN
    2011-06-30   NaN
    2011-09-30   NaN
    2011-12-31     3
    2012-03-31     3
    dtype: float64
    
    0 讨论(0)
  • 2020-12-02 19:25

    Just call reset_index():

    In [130]: s
    Out[130]:
    0           1
    1999-03-31  SOLD_PRICE   NaN
    1999-06-30  SOLD_PRICE   NaN
    1999-09-30  SOLD_PRICE   NaN
    1999-12-31  SOLD_PRICE     3
    2000-03-31  SOLD_PRICE     3
    Name: 2, dtype: float64
    
    In [131]: s.reset_index()
    Out[131]:
                0           1   2
    0  1999-03-31  SOLD_PRICE NaN
    1  1999-06-30  SOLD_PRICE NaN
    2  1999-09-30  SOLD_PRICE NaN
    3  1999-12-31  SOLD_PRICE   3
    4  2000-03-31  SOLD_PRICE   3
    

    There are many ways to drop columns:

    Call reset_index() twice and specify a column:

    In [136]: s.reset_index(0).reset_index(drop=True)
    Out[136]:
                0   2
    0  1999-03-31 NaN
    1  1999-06-30 NaN
    2  1999-09-30 NaN
    3  1999-12-31   3
    4  2000-03-31   3
    

    Delete the column after resetting the index:

    In [137]: df = s.reset_index()
    
    In [138]: df
    Out[138]:
                0           1   2
    0  1999-03-31  SOLD_PRICE NaN
    1  1999-06-30  SOLD_PRICE NaN
    2  1999-09-30  SOLD_PRICE NaN
    3  1999-12-31  SOLD_PRICE   3
    4  2000-03-31  SOLD_PRICE   3
    
    In [139]: del df[1]
    
    In [140]: df
    Out[140]:
                0   2
    0  1999-03-31 NaN
    1  1999-06-30 NaN
    2  1999-09-30 NaN
    3  1999-12-31   3
    4  2000-03-31   3
    

    Call drop() after resetting:

    In [144]: s.reset_index().drop(1, axis=1)
    Out[144]:
                0   2
    0  1999-03-31 NaN
    1  1999-06-30 NaN
    2  1999-09-30 NaN
    3  1999-12-31   3
    4  2000-03-31   3
    

    Then, after you've reset your index, just rename the columns

    In [146]: df.columns = ['Date', 'Sales']
    
    In [147]: df
    Out[147]:
             Date  Sales
    0  1999-03-31    NaN
    1  1999-06-30    NaN
    2  1999-09-30    NaN
    3  1999-12-31      3
    4  2000-03-31      3
    
    0 讨论(0)
提交回复
热议问题