多索引 pandas 数据框和 .diff()
Multi index pandas dataframe and .diff()
假设我有以下多索引 pandas 数据框:
A B
Date Code
01-01-2017 s1 1 2
s2 3 1
01-02-2017 s1 2 2
s2 3 3
与所讨论的 不同,我不希望 .diff(1)
对具有相同日期的值进行操作并在每个新日期重置,我希望 .diff(1)
提供以下输出:
A B
Date Code
01-01-2017 s1 Nan Nan
s2 Nan Nan
01-02-2017 s1 1 0
s2 2 1
即 .diff(1)
通过索引的 differebnt 值在级别 0 指定的块进行差异,而不是像 link 提议的那样在块内进行差异。
换句话说,我想通过条目减去这两个矩阵:
|2 2| _ |1 2|
|3 3| |3 1|
您可以使用 groupby
by second level with DataFrameGroupBy.diff
:
df = df.sort_index()
df = df.groupby(level=1).diff()
print (df)
A B
Date Code
01-01-2017 s1 NaN NaN
s2 NaN NaN
01-02-2017 s1 1.0 0.0
s2 0.0 2.0
因为如果使用第一级:
df = df.groupby(level=0).diff()
print (df)
A B
Date Code
01-01-2017 s1 NaN NaN
s2 2.0 -1.0
01-02-2017 s1 NaN NaN
s2 1.0 1.0
假设我有以下多索引 pandas 数据框:
A B
Date Code
01-01-2017 s1 1 2
s2 3 1
01-02-2017 s1 2 2
s2 3 3
与所讨论的 .diff(1)
对具有相同日期的值进行操作并在每个新日期重置,我希望 .diff(1)
提供以下输出:
A B
Date Code
01-01-2017 s1 Nan Nan
s2 Nan Nan
01-02-2017 s1 1 0
s2 2 1
即 .diff(1)
通过索引的 differebnt 值在级别 0 指定的块进行差异,而不是像 link 提议的那样在块内进行差异。
换句话说,我想通过条目减去这两个矩阵:
|2 2| _ |1 2|
|3 3| |3 1|
您可以使用 groupby
by second level with DataFrameGroupBy.diff
:
df = df.sort_index()
df = df.groupby(level=1).diff()
print (df)
A B
Date Code
01-01-2017 s1 NaN NaN
s2 NaN NaN
01-02-2017 s1 1.0 0.0
s2 0.0 2.0
因为如果使用第一级:
df = df.groupby(level=0).diff()
print (df)
A B
Date Code
01-01-2017 s1 NaN NaN
s2 2.0 -1.0
01-02-2017 s1 NaN NaN
s2 1.0 1.0