我有一份数据
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():
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()降到多索引级别。
谢谢。
发布于 2019-08-12 13:38:19
使用MultiIndex Series Index.to_series创建新的元组,并通过str[1]设置元组的第二个值,然后使用DataFrameGroupBy.diff
df['C'] = df.index.to_series().str[1].groupby(level=0).diff()或DataFrame.assign和Index.get_level_values的crete新列
df['C'] = df.assign(P=df.index.get_level_values(1)).groupby(level=0)['P'].diff()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详细信息
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: int64print (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的另一种解决方案
df.index.to_frame().groupby(level=0)['Price'].diff()https://stackoverflow.com/questions/57462264
复制相似问题