对多索引 pandas 数据帧的值进行排序并计算差异
Sort value and calculate difference for multiindex pandas dataframe
我有一个这样的 pandas 数据框,其中 place1
和 place2
是索引,我想按 data
值对索引 place2
进行排序,在不打乱索引 place1
顺序的情况下,即 place2
列对于每个 place1
变为 a, c, b
。有办法吗?
place1 place2 data
sss a 100
b 300
c 200
ses a 400
b 600
c 500
... ... ...
我还想为每个place1
计算place2 == b
和place2 == a
之间的data
差异,即dataframe变为
place1 place2 data diff
sss a 100 200
b 300
c 200
ses a 400 200
b 600
c 500
... ... ... ...
有没有像这样计算差异的有效方法?提前致谢!
你可以.groupby()
然后计算每组的差异:
groups = df.groupby(level=0, group_keys=False, sort=False)
df['diff'] = groups.transform(lambda x: x.xs('b', level='place2').iloc[0] - x.xs('a', level='place2').iloc[0])
它将值添加到组的每一行 - 但如果需要,您可以在之后删除“重复项”。
>>> df
data diff
place1 place2
sss a 100 200
b 300 200
c 200 200
ses a 400 200
b 600 200
c 500 200
然后您可以对每个组中的 data
列进行排序
>>> groups.apply(lambda x: x.sort_values('data'))
data diff
place1 place2
sss a 100 200
c 200 200
b 300 200
ses a 400 200
c 500 200
b 600 200
我有一个这样的 pandas 数据框,其中 place1
和 place2
是索引,我想按 data
值对索引 place2
进行排序,在不打乱索引 place1
顺序的情况下,即 place2
列对于每个 place1
变为 a, c, b
。有办法吗?
place1 place2 data
sss a 100
b 300
c 200
ses a 400
b 600
c 500
... ... ...
我还想为每个place1
计算place2 == b
和place2 == a
之间的data
差异,即dataframe变为
place1 place2 data diff
sss a 100 200
b 300
c 200
ses a 400 200
b 600
c 500
... ... ... ...
有没有像这样计算差异的有效方法?提前致谢!
你可以.groupby()
然后计算每组的差异:
groups = df.groupby(level=0, group_keys=False, sort=False)
df['diff'] = groups.transform(lambda x: x.xs('b', level='place2').iloc[0] - x.xs('a', level='place2').iloc[0])
它将值添加到组的每一行 - 但如果需要,您可以在之后删除“重复项”。
>>> df
data diff
place1 place2
sss a 100 200
b 300 200
c 200 200
ses a 400 200
b 600 200
c 500 200
然后您可以对每个组中的 data
列进行排序
>>> groups.apply(lambda x: x.sort_values('data'))
data diff
place1 place2
sss a 100 200
c 200 200
b 300 200
ses a 400 200
c 500 200
b 600 200