熊猫重新索引多列

时间:2019-09-11 07:15:13

标签: python pandas

下面我总结了许多csv文件中的数据。

def numeric_key(string):
    splitted = string.split(' ')
    if splitted[0].isdigit():
        return int(splitted[0])
    return -1

my_list.sort(key=numeric_key)

收集关于特定Sub Check() With ThisWorkbook.Sheets("Sheet1") 'Change accordingly .Range("myTable").EntireColumn.Hidden = True .Range("myTable[Email]").EntireColumn.Hidden = False .Range("myTable[User]").EntireColumn.Hidden = False End With End Sub +----------+-----+------+------+------+ | Date | Loc | Hour | Rain | Wind | +----------+-----+------+------+------+ | 1-Sep-19 | 1 | 1 | 184 | 65 | | 1-Sep-19 | 1 | 3 | 126 | 64 | | 2-Sep-19 | 1 | 1 | 112 | 63 | | 2-Sep-19 | 1 | 2 | 155 | 0 | | 2-Sep-19 | 1 | 3 | 186 | 50 | | 3-Sep-19 | 1 | 2 | 154 | 79 | | 3-Sep-19 | 1 | 3 | 143 | 61 | | 1-Sep-19 | 2 | 1 | 187 | 73 | | 1-Sep-19 | 2 | 2 | 173 | 63 | | 1-Sep-19 | 2 | 3 | 186 | 63 | | 3-Sep-19 | 2 | 1 | 172 | 56 | | 3-Sep-19 | 2 | 2 | 156 | 56 | | 3-Sep-19 | 2 | 3 | 176 | 79 | +----------+-----+------+------+------+ Rain的{​​{1}}和Wind详细信息的随机观察结果。

请注意DayLocationHour中缺少的行。

我想用Day值填充丢失的数据。我想要的最终输出如下。

Location

到目前为止,我已经尝试了以下代码

Hour

但是,我得到一个错误。该怎么解决

1 个答案:

答案 0 :(得分:1)

首先必须创建MultiIndex,以便可以通过所有可能的值使用reindex

df = df.set_index(['Date','Loc','Hour'])
mux = pd.MultiIndex.from_product(df.index.levels, names=df.index.names)
df = df.reindex(mux, fill_value=0).reset_index()
print (df)
      Date  Loc  Hour  Rain  Wind
0   1Sep19    1     1   184    65
1   1Sep19    1     2     0     0
2   1Sep19    1     3   126    64
3   1Sep19    2     1   187    73
4   1Sep19    2     2   173    63
5   1Sep19    2     3   186    63
6   2Sep19    1     1   112    63
7   2Sep19    1     2   155     0
8   2Sep19    1     3   186    50
9   2Sep19    2     1     0     0
10  2Sep19    2     2     0     0
11  2Sep19    2     3     0     0
12  3Sep19    1     1     0     0
13  3Sep19    1     2   154    79
14  3Sep19    1     3   143    61
15  3Sep19    2     1   172    56
16  3Sep19    2     2   156    56
17  3Sep19    2     3   176    79

您的解决方案应更改:

df['Date'] = pd.to_datetime(df['Date'])

idx_date = pd.date_range('2019-09-01','2019-09-03')
idx_loc = np.arange(1,3)
idx_hour = np.arange(1,4)

cols =['Rain', 'Wind']
mux = pd.MultiIndex.from_product([idx_date,idx_loc,idx_hour], 
                                 names=['Date','Loc','Hour'])
df_filled = (df.set_index(['Date','Loc','Hour'])
               .reindex(index=mux, columns=cols, fill_value=0)
               .reset_index())
print (df_filled)
         Date  Loc  Hour  Rain  Wind
0  2019-09-01    1     1   184    65
1  2019-09-01    1     2     0     0
2  2019-09-01    1     3   126    64
3  2019-09-01    2     1   187    73
4  2019-09-01    2     2   173    63
5  2019-09-01    2     3   186    63
6  2019-09-02    1     1   112    63
7  2019-09-02    1     2   155     0
8  2019-09-02    1     3   186    50
9  2019-09-02    2     1     0     0
10 2019-09-02    2     2     0     0
11 2019-09-02    2     3     0     0
12 2019-09-03    1     1     0     0
13 2019-09-03    1     2   154    79
14 2019-09-03    1     3   143    61
15 2019-09-03    2     1   172    56
16 2019-09-03    2     2   156    56
17 2019-09-03    2     3   176    79