【问题标题】:Pandas: Efficiently splitting entriesPandas:有效拆分条目
【发布时间】:2017-01-05 08:14:30
【问题描述】:

我有一个 Pandas dataframe,其列如下:

event_id, obj_0_type, obj_0_foo, obj_0_bar, obj_1_type, obj_1_foo, obj_1_bar, obj_n_type, obj_n_foo, obj_n_bar, ....

例如:

col_idx = ['event_id']
[col_idx.extend(('obj_%d_id' %d, 'obj_%d_foo' %d, 'obj_%d_bar' %d)) for d in range(5)]
event_id = np.array(range(0,5))
data = np.random.rand(15,5)
data = np.vstack((event_id, data))
df = DataFrame(data.T, index = range(5), columns = col_idx)

我想拆分数据框的每一行,以便每个对象都有一个条目,例如:

event_id、obj_type、obj_foo、obj_bar

其中 event_id 将在给定事件的所有对象之间共享。

有很多非常慢的方法(迭代数据帧行并创建新的系列对象),但这些方法非常缓慢并且显然不符合 Python 标准。有没有我想念的更简单的方法?

【问题讨论】:

    标签: python numpy pandas


    【解决方案1】:

    根据freenode上#pydata中一些人的一些建议,这就是我想出的:

    data = []
    for d in range(5):
        temp = df.ix[:, ['event_id', 'obj_%d_id' % d, 'obj_%d_foo' % d, 'obj_%d_bar' % d]]
        temp.columns = ['event_id', 'obj_id', 'obj_foo', 'obj_bar']
        # Giving columns unique names.
        temp.index = temp['event_id']*10 + d
        # Creating a unique index.
        data.append(temp)
    
    concat(data)
    

    这很有效,而且速度相当快!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多