我正在尝试使用pandas构建如下所示的数据框架,其中Asum仅在当天存在间隔1和3时才获取值。我最接近的东西正在使用此:
df['ASum']=df.groupby(level=['DateTime'])['A'].sum()
但是,当我运行它时,它会一直沿ASum返回NaN。任何有关如何做到这一点的想法表示赞赏。
A B ASum
DateTime INT
2016-07-05 3 4700.0 4700.0 0
2016-07-06 1 5906.0 6830.0 0
3 1090.0 1090.0 6996
2016-07-07 1 7969.0 5273.0 0
3 1971.0 1971.0 9940
2016-07-08 1 3296.0 2764.0 0
3 1179.0 1179.0 4475
2016-07-11 1 4993.0 5798.0 0
3 1325.0 1325.0 6318
最佳答案
这是一个基于拆解INT
级别,获取总和并将其堆叠回来的解决方案。
import pandas as pd
midx = pd.MultiIndex(levels=[['2016-07-05', '2016-07-06', '2016-07-07',
'2016-07-08', '2016-07-11'], [1, 3]],
labels=[[0, 1, 1, 2, 2, 3, 3, 4, 4],
[1, 0, 1, 0, 1, 0, 1, 0, 1]],
names=['DateTime', 'INT'])
df = pd.DataFrame({'A': [4700.0, 5906.0, 1090.0, 7969.0, 1971.0,
3296.0, 1179.0, 4993.0, 1325.0],
'B': [4700.0, 6830.0, 1090.0, 5273.0, 1971.0,
2764.0, 1179.0, 5798.0, 1325.0]},
index=midx)
df = df.unstack(level='INT')
df[('Asum', 3)] = df['A'].sum(axis=1, skipna=False)
df = df.stack(level='INT').fillna(0)
print(df)
输出:
A B Asum
DateTime INT
2016-07-05 3 4700.0 4700.0 0.0
2016-07-06 1 5906.0 6830.0 0.0
3 1090.0 1090.0 6996.0
2016-07-07 1 7969.0 5273.0 0.0
3 1971.0 1971.0 9940.0
2016-07-08 1 3296.0 2764.0 0.0
3 1179.0 1179.0 4475.0
2016-07-11 1 4993.0 5798.0 0.0
3 1325.0 1325.0 6318.0
关于python - 带多个索引的分组依据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38725456/