【问题标题】:How to concatenate multiple shifted rows of a dataframe side by side?如何并排连接数据帧的多个移位行?
【发布时间】:2016-12-09 06:31:26
【问题描述】:

我正在研究数据预处理,我想以与 n-gram 类似的方式排列数据帧中的样本。例如,如果我的样本是:

1,2,3,4    1
0,4,2,1    1
0,2,3,5    1
1,5,5,5    0
6,5,2,1    0

我希望新的数据框看起来像这样:

1,2,3,4,0,4,2,1,0,2,3,5    1
0,4,2,1,0,2,3,5,1,5,5,5    0
0,2,3,5,1,5,5,5,6,5,2,1    0

目标变量基本上是最后一个附加样本(即第三个)的目标值。

我在 python 3 中使用 pandas 数据框和 scikit-learn 进行机器学习。

如何迭代数据帧样本并将它们并排连接?我试过concat,但每一行都变成Series类型,因此没有连接。

为了进一步参考,我之前在同一作品上问了一个问题here

任何建议将不胜感激。

【问题讨论】:

  • 我应该只使用熊猫吗?如果没有,我已经使用列表和 groupby 制定了解决方案。如果你愿意,我可以分享。

标签: python pandas scikit-learn


【解决方案1】:

本质上,您正在尝试连接数据框的连续移动版本。一种方法是作为列表理解:

 window_size=3
 pd.concat([df.iloc[:,0:4].shift(-i) for i in range(window_size)] 
           + [df.iloc[:,4].shift(1 - window_size)], axis=1).iloc[0:1 - window_size]

       a  b  c  d      a    b    c    d      a    b    c    d    y
0      1  2  3  4    0.0  4.0  2.0  1.0    0.0  2.0  3.0  5.0  1.0
1      0  4  2  1    0.0  2.0  3.0  5.0    1.0  5.0  5.0  5.0  0.0
2      0  2  3  5    1.0  5.0  5.0  5.0    6.0  5.0  2.0  1.0  0.0

【讨论】:

    【解决方案2】:

    这更像是一个麻木的问题

    生成数据的代码

    data =np.array([[1,2,3,4],
    [0,4,2,1  ],
    [0,2,3,5  ],
    [1,5,5,5  ],
    [6,5,2,1  ]])
    labels = np.array([[1,1,1,0,0]]).transpose()
    

    “重塑”数据

    row_ids = [range(k,k+3) for k in range(x.shape[0]-2)]
    new_data = np.reshape(data[row_ids, :], [data.shape[0]-2, 12])
    new_labels = labels[2:]
    

    结果:

    print new_data
    print new_labels
    
    [[1 2 3 4 0 4 2 1 0 2 3 5]
     [0 4 2 1 0 2 3 5 1 5 5 5]
     [0 2 3 5 1 5 5 5 6 5 2 1]]
    [[1]
     [0]
     [0]]
    

    最后,制作一个 pandas DF:

    df = pd.DataFrame(new_data)
    df['new_labels'] = new_labels
    

    附带说明:为了更好地理解,请查看我们如何使用 row_ids 对数据进行采样

    print row_ids
    
    [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
    

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多