首页 > 解决方案 > 在 Python 上的 R 中执行分类,其中每个数据帧都被标记

问题描述

我的问题是,我没有将数据框中的每一行都对应一个标签,而是有多个数据框,每个数据框都有相同的列和行数,但每个数据框都被标记为 l1、l2 或 l3。您需要数据框中的所有数据才能确定标签。

例如,假设我有这个数据框及其标记为 l1,并想象我有多个标记为 l1、l2 或 l3。我需要创建一个分类模型,所以当我有一个像这样的新数据框时,它可以对其进行分类。


Time    Measure1  Measure2      
 1         10       1000  
 2         12       1245  
 3         20       1837  
 4         18       1837  

这如何在 R 或 Python 中构建?

我希望这很清楚!

标签: pythonrdataframeclassification

解决方案


您有正确的想法:要使分类模型起作用,您需要将单个样本的数据放在结果数据框的单行中。您在示例中拥有的是某种交叉表,但您需要的是平面表。幸运的是,使用 pandas,您可以使用以下方法轻松创建平面表unstack()

>>> df = pd.DataFrame([[1, 10, 1000], [2, 12, 1245], [3, 20, 1837], [4, 18, 1837]],
                      columns=['Time', 'Measure1', 'Measure2'])
>>> s = df.set_index('Time').unstack()
>>> s
          Time
Measure1  1         10
          2         12
          3         20
          4         18
Measure2  1       1000
          2       1245
          3       1837
          4       1837
dtype: int64

结果是pd.Series带有 MultiIndex 的(= 单列)。然后,您可以将标签添加到测量值并将所有数据连接到单个数据框中。

>>> s['label'] = 'l1'
>>> df = pd.concat([s,s,s], axis=1).T
>>> df
     Measure1             Measure2                   label
Time        1   2   3   4        1     2     3     4      
0          10  12  20  18     1000  1245  1837  1837    l1
1          10  12  20  18     1000  1245  1837  1837    l1
2          10  12  20  18     1000  1245  1837  1837    l1

在列中使用 MultiIndex 有点笨拙,但您可以将它们替换为

>>> df.columns = ['_'.join(str(x) for x in c).strip('_') for c in df.columns]
>>> df
  Measure1_1 Measure1_2 Measure1_3  ... Measure2_3 Measure2_4 label
0         10         12         20  ...       1837       1837    l1
1         10         12         20  ...       1837       1837    l1
2         10         12         20  ...       1837       1837    l1

推荐阅读