首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将diff()应用于熊猫多指标水平?

将diff()应用于熊猫多指标水平?
EN

Stack Overflow用户
提问于 2019-08-12 13:36:11
回答 1查看 576关注 0票数 1

我有一份数据

代码语言:javascript
复制
                   A     B  
Date      Price    
2019-8-1  1000     1.1   0.0
          1500     2.3   2.2
          2200     4.5   0.5
          3100     4.4   0.9
2019-8-2  1100     2.2   1.2
          1400     2.5   1.3
          2200     0.9   1.6
          3500     1.1   0.1

我需要得到第三列'C',这将是多索引中的level=1 (Price)的一个diff():

代码语言:javascript
复制
                   A     B      C
Date      Price    
2019-8-1  1000     1.1   0.0    NaN
          1500     2.3   2.2    500
          2200     4.5   0.5    700
          3100     4.4   0.9    900
2019-8-2  1100     2.2   1.2    NaN
          1400     2.5   1.3    300
          2200     0.9   1.6    800
          3500     1.1   0.1   1300

我试图使用groupby(level=0),但我不知道如何将diff()降到多索引级别。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-12 13:38:19

使用MultiIndex Series Index.to_series创建新的元组,并通过str[1]设置元组的第二个值,然后使用DataFrameGroupBy.diff

代码语言:javascript
复制
df['C'] = df.index.to_series().str[1].groupby(level=0).diff()

DataFrame.assignIndex.get_level_values的crete新列

代码语言:javascript
复制
df['C'] = df.assign(P=df.index.get_level_values(1)).groupby(level=0)['P'].diff()
代码语言:javascript
复制
print (df)
                  A    B       C
Date     Price                  
2019-8-1 1000   1.1  0.0     NaN
         1500   2.3  2.2   500.0
         2200   4.5  0.5   700.0
         3100   4.4  0.9   900.0
2019-8-2 1100   2.2  1.2     NaN
         1400   2.5  1.3   300.0
         2200   0.9  1.6   800.0
         3500   1.1  0.1  1300.0

详细信息

代码语言:javascript
复制
print (df.index.to_series())
Date      Price
2019-8-1  1000     (2019-8-1, 1000)
          1500     (2019-8-1, 1500)
          2200     (2019-8-1, 2200)
          3100     (2019-8-1, 3100)
2019-8-2  1100     (2019-8-2, 1100)
          1400     (2019-8-2, 1400)
          2200     (2019-8-2, 2200)
          3500     (2019-8-2, 3500)

print (df.index.to_series().str[1])
Date      Price
2019-8-1  1000     1000
          1500     1500
          2200     2200
          3100     3100
2019-8-2  1100     1100
          1400     1400
          2200     2200
          3500     3500
dtype: int64
代码语言:javascript
复制
print (df.assign(P=df.index.get_level_values(1)))
                  A    B     P
Date     Price                
2019-8-1 1000   1.1  0.0  1000
         1500   2.3  2.2  1500
         2200   4.5  0.5  2200
         3100   4.4  0.9  3100
2019-8-2 1100   2.2  1.2  1100
         1400   2.5  1.3  1400
         2200   0.9  1.6  2200
         3500   1.1  0.1  3500

编辑:

comments的另一种解决方案

代码语言:javascript
复制
df.index.to_frame().groupby(level=0)['Price'].diff()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57462264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档