在Python上的R中执行分类,其中每个数据帧都被标记

时间:2019-11-19 09:22:37

标签: python r dataframe classification

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

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


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

如何用R或Python构建结构?

我希望这很清楚!

1 个答案:

答案 0 :(得分:0)

您有一个正确的想法:要使分类模型正常工作,您需要在结果数据框的单行中包含单个样本的数据。在示例中,您拥有的是某种交叉表,但您需要的是扁平表。幸运的是,使用熊猫,您可以使用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

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

>>> 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