如何向 Datetime Multiindex Panda Dataframe 添加一行
how to add a row to a Datetime Multiindex Panda Dataframe
How would I go about adding a row to the top of this dataframe. This
is downloaded data. I cannot use a specific row index in the formula
because the first Datetime indice changes all the time. I cannot also use a
specific label for the inner index as it could be Datetime. Is there a
way to generalize this?
I tried this
df[df.index.min()[0])) - dt.timedelta(minutes=5), :] = [list to add]
however it only add a row at the end of the Dataframe. Sorting,
df.sort_index(inplace=True)
did not help because I guess I am dealing with 2 levels of index here;
which would explain why the row sticks to the bottom of the frame.
A B C D E
2006-04-28 00:00:00
A 69.62 69.62 6.518 65.09 69.62
B
C
2006-05-01 00:00:00
A 71.5 71.5 6.522 65.16 71.5
B
C
2006-05-02 00:00:00
A 72.34 72.34 6.669 66.55 72.34
B
C
最终结果应该是这样的:
X
是要添加的list/array中的元素。
A B C D E
NEWROW X1 X2 X3 X4 X5
2006-04-28 00:00:00
A 69.62 69.62 6.518 65.09 69.62
B
C
2006-05-01 00:00:00
A 71.5 71.5 6.522 65.16 71.5
B
C
2006-05-02 00:00:00
A 72.34 72.34 6.669 66.55 72.34
B
C
sort_index
and sortlevel
对我来说 不 与 Multiindex
:
一起工作
所以你可以使用小 hack
- 首先 reset_index
with second level Stats
, then sort_index
and last set_index
返回参数 append=True
:
df1 = df1.sort_index()
df1.loc[((df1.index.min()[0]) - dt.timedelta(minutes=5), 'SUM'),:] =
df1.loc[(slice(None), slice('price')),:].sum()
df1 = df1.reset_index('Stats')
df1 = df1.sort_index(axis=0).set_index('Stats', append=True)
print (df1)
A B C D E
Date Stats
2006-04-27 23:55:00 SUM 213.46 213.46 19.709 196.80 213.46
2006-04-28 00:00:00 price 69.62 69.62 6.518 65.09 69.62
std NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN
2006-05-01 00:00:00 price 71.50 71.50 6.522 65.16 71.50
std NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN
2006-05-02 00:00:00 price 72.34 72.34 6.669 66.55 72.34
std NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN
How would I go about adding a row to the top of this dataframe. This is downloaded data. I cannot use a specific row index in the formula because the first Datetime indice changes all the time. I cannot also use a specific label for the inner index as it could be Datetime. Is there a way to generalize this?
I tried this
df[df.index.min()[0])) - dt.timedelta(minutes=5), :] = [list to add]
however it only add a row at the end of the Dataframe. Sorting,
df.sort_index(inplace=True)
did not help because I guess I am dealing with 2 levels of index here; which would explain why the row sticks to the bottom of the frame.
A B C D E
2006-04-28 00:00:00
A 69.62 69.62 6.518 65.09 69.62
B
C
2006-05-01 00:00:00
A 71.5 71.5 6.522 65.16 71.5
B
C
2006-05-02 00:00:00
A 72.34 72.34 6.669 66.55 72.34
B
C
最终结果应该是这样的:
X
是要添加的list/array中的元素。
A B C D E
NEWROW X1 X2 X3 X4 X5
2006-04-28 00:00:00
A 69.62 69.62 6.518 65.09 69.62
B
C
2006-05-01 00:00:00
A 71.5 71.5 6.522 65.16 71.5
B
C
2006-05-02 00:00:00
A 72.34 72.34 6.669 66.55 72.34
B
C
sort_index
and sortlevel
对我来说 不 与 Multiindex
:
所以你可以使用小 hack
- 首先 reset_index
with second level Stats
, then sort_index
and last set_index
返回参数 append=True
:
df1 = df1.sort_index()
df1.loc[((df1.index.min()[0]) - dt.timedelta(minutes=5), 'SUM'),:] =
df1.loc[(slice(None), slice('price')),:].sum()
df1 = df1.reset_index('Stats')
df1 = df1.sort_index(axis=0).set_index('Stats', append=True)
print (df1)
A B C D E
Date Stats
2006-04-27 23:55:00 SUM 213.46 213.46 19.709 196.80 213.46
2006-04-28 00:00:00 price 69.62 69.62 6.518 65.09 69.62
std NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN
2006-05-01 00:00:00 price 71.50 71.50 6.522 65.16 71.50
std NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN
2006-05-02 00:00:00 price 72.34 72.34 6.669 66.55 72.34
std NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN