gpt4 book ai didi

python - 强制显示索引值

转载 作者:行者123 更新时间:2023-12-01 09:05:01 25 4
gpt4 key购买 nike

我想从 DataFrame 构建一个时间序列。它是多索引的,一个索引内的每一步都对应于时间上的恒定变化。然而,这些指数并不全部存在。我如何扩展数据(用于将来的填充或其他插补),以便某些级别的指数被迫具有其所有值?

# Example: here I0 is a running number and I1 to be forced to have 0 and 1 for every I0.

I0 | I1 || Value -> I0 | I1 || Value
---+----++------- ---+----++-------
0 | 0 || 1 0 | 0 || 1
| 1 || 2 | 1 || 2
1 | 0 || 3 1 | 0 || 3
2 | 0 || 5 | 1 || NaN
| 1 || 6 2 | 0 || 5
3 | 1 || 8 | 1 || 6
3 | 0 || NaN
| 1 || 8

这是一个可以尝试的框架:

df = pd.DataFrame({'I0': [0,0,1,2,2,3], 'I1': [0,1,0,0,1,1], 'Value': [1,2,3,5,6,8]})
df = df.set_index(['I0', 'I1'])

澄清

我的 DataFrame 的索引已设置。在最好的情况下,我希望能够操作 MultiIndex,这样级别就不必转换回列。但我知道是否需要这样做。

最佳答案

使用MultiIndex.from_productSeries.reindex :

df = pd.DataFrame({'I0': [0,0,1,2,2,3], 'I1': [0,1,0,0,1,1], 'Value': [1,2,3,5,6,8]})

mux = pd.MultiIndex.from_product([df['I0'].unique(), [0,1]], names=['I0','I1'])
<小时/>
mux = pd.MultiIndex.from_product([np.arange(df['I0'].max() + 1), 
df['I1'].unique()],
names=['I0','I1'])
<小时/>
mux = pd.MultiIndex.from_product([df['I0'].unique(), df['I1'].unique()], names=['I0','I1'])
df = df.set_index(['I0', 'I1']).reindex(mux)

print (df)
Value
I0 I1
0 0 1.0
1 2.0
1 0 3.0
1 NaN
2 0 5.0
1 6.0
3 0 NaN
1 8.0

编辑:

在更改了一些讨论解决方案之后 - 为了保留 MultiIndex 的其他级别,首先需要将级别转换为整数(以避免按字符串排序),然后使用 unstackstack 。要保留 NaN,请使用参数 dropna=False:

a = df.index.get_level_values(0).astype(int)
b = df.index.get_level_values(1).astype(int)
c = df.index.get_level_values(2) # String index level
d = df.index.get_level_values(3).astype(int)

df.index = pd.MultiIndex.from_arrays([a, b, c, d], names=df.index.names)

df = df.unstack().stack(dropna=False)

关于python - 强制显示索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com