0

假设我有一个这样的数据框,

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
4

0 回答 0