【问题标题】:Pandas dataframe hierarchical index columns - Scale slice of dataframePandas 数据框分层索引列 - 缩放数据框切片
【发布时间】:2018-03-29 13:57:36
【问题描述】:

我有一个 pandas 数据框,其中包含连续数据和离散数据。我通过使用分层列索引以不同的方式处理它们,从而将连续数据与离散数据分开。

让我们假设以下数据框:

首先我正在构建一个分层索引,然后我可以在初始化空数据框时使用它。然后我用连续和离散数据填充示例数据框。

my_multiindex = pd.MultiIndex(levels=[['discrete', 'continuous'],[]],
                              labels=[[],[]],
                              names=['Datatype', 'Data']) 

df = pd.DataFrame(columns=my_multiindex,index=pd.date_range('20180101 9:01:00',freq='s',periods=50))

df.loc[:,('continuous', 'data1')] = np.random.uniform(-50, 100, 50)
df.loc[:,('continuous', 'data2')] = np.random.uniform(-500, 800, 50)
df.loc[:,('continuous', 'data3')] = np.random.uniform(-300, 200, 50)

df.loc[:,('discrete', 'data4')] = np.random.randint(0, 2, 50)
df.loc[:,('discrete', 'data5')] = np.random.randint(0, 2, 50)
df.loc[:,('discrete', 'data6')] = np.random.randint(0, 2, 50)

生成的数据框如下所示:

Datatype            continuous                         discrete            
Data                     data1       data2       data3    data4 data5 data6
2018-01-01 09:01:00  -6.406635  208.992257    1.845863        0     1     0
2018-01-01 09:01:01  80.084693  264.907285  190.628975        0     0     0
2018-01-01 09:01:02  74.734951  -39.456532 -132.749219        0     1     0
2018-01-01 09:01:03  55.703297  413.700692  147.826342        1     0     0
2018-01-01 09:01:04  25.797465 -290.116077 -250.018855        0     0     1

然后我想使用 StandardScaler 来缩放数据框中的连续数据。我只是试图将离散数据复制到新的数据帧 df_scaled。

df_scaled = pd.DataFrame(columns=my_multiindex, index=df.index)
scaler = StandardScaler()
scaler.fit(df.loc[:,'continuous'])

df_scaled.loc[:,'discrete'] = df.loc[:,'discrete']
df_scaled.loc[:,'continuous'] = pd.DataFrame(scaler.transform(df.loc[:,'continuous']))

但是,这不起作用。运行后,新的数据帧 df_scaled 仍然为空。我做错了什么?

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    我不太确定为什么您的方法不起作用。我猜 Multiindexes 在 pandas 中仍然是一种实验性的。 但是有一个简单的解决方法:

    df_scaled = df.copy()
    df_scaled.loc[:,'continuous'] = scaler.transform(df.loc[:,'continuous'])
    

    如果您想更详细地了解您的方法为何不起作用,也许您应该考虑将其发布在 pandas github 问题跟踪上,并询问这是否是错误或功能。

    【讨论】:

    • 感谢您的帮助!它现在正在使用您的解决方法。
    猜你喜欢
    • 1970-01-01
    • 2017-01-17
    • 2018-11-21
    • 2018-06-16
    • 2020-06-20
    • 2018-12-02
    • 2017-02-13
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多