我有一个带有列的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将在给定事件的所有对象之间共享。
有许多非常缓慢的方法(迭代数据帧行并创建新的系列对象),但这些方法非常缓慢且明显是非常规的。我错过了一种更简单的方法吗?
答案 0 :(得分:2)
根据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)
这很有效,速度相当快!