假设我有一个这样的数据框,
import pandas as pd
import numpy as np
df = pd.DataFrame({
str(i): np.random.randint(0, 4, 5) for i in np.arange(2015, 2055, 5)
})
df
2015 2020 2025 2030 2035 2040 2045 2050
0 0 1 1 3 3 1 0 1
1 1 0 3 1 1 0 1 1
2 0 1 1 1 3 2 2 0
3 0 2 0 0 0 1 3 0
4 1 3 2 3 0 2 0 1
我将如何将它变成类似的东西:
index = pd.MultiIndex.from_product([np.arange(2015, 2055, 5), np.arange(1, 6, 1)])
df = pd.DataFrame(np.random.randint(0, 4, 40), index=index, columns=["value"])
df
value
2015 1 0
2 0
3 2
4 2
5 1
2020 1 0
2 2
3 0
4 2
5 3
2025 1 0
2 1
3 2
4 2
5 0
2030 1 1
2 0
3 3
4 0
5 0
2035 1 0
2 0
3 2
4 3
5 3
2040 1 3
2 0
3 1
4 1
5 2
2045 1 1
2 0
3 0
4 3
5 0
2050 1 3
2 2
3 3
4 0
5 1
我尝试过使用pd.melt(),stack()但不断df充满NaN价值。例如:
pd.melt(df, var_name"year", value_name="values").reindex(index)
year values
2015 1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
2020 1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
2025 1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
2030 1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
2035 1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
2040 1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
2045 1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
2050 1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN