将每行数据转换为Pandas数据帧中每个ID的列数据

时间:2017-09-28 10:22:47

标签: python pandas dataframe

我的pandas数据框看起来像这样

Id   Length1 height1 Length2 height2
1     100     20       80     30
2      70     10       60     15

所有Id的数据需要按每次测量的长度/高度进行分组。

Id   0           1     2       3
1    100         20    70      10
2    80          30    60      15

如何将行转换为列和列到dataframe中的行

2 个答案:

答案 0 :(得分:3)

设置

df = pd.DataFrame(dict(
    Length1=[1, 2, 3],
    Height1=[4, 5, 6],
    Length2=[7, 8, 9],
    Height2=[0, 1, 2]
))['Length1 Height1 Length2 Height2'.split()]

df

   Length1  Height1  Length2  Height2
0        1        4        7        0
1        2        5        8        1
2        3        6        9        2
pd.DataFrame({n: g.values.ravel() for n, g in df.groupby(lambda x: x[-1], 1)}).T

   0  1  2  3  4  5
1  1  4  2  5  3  6
2  7  0  8  1  9  2

答案 1 :(得分:3)

您可以使用comment的改进答案:

df = pd.DataFrame({'id':[4,5,4],
                   'l1':[7,8,9],
                   'h1':[1,3,5],
                   'l2':[5,3,6],
                   'h2':[4,3,5]}, columns = ['id','l1','h1','l2', 'h2'])

print (df)
   id  l1  h1  l2  h2
0   4   7   1   5   4
1   5   8   3   3   3
2   4   9   5   6   5



df = df.set_index('id')
k = len(df.index)

a = df.values
df = pd.DataFrame(np.vstack((a[:, :2].reshape(1, -1), a[:, 2:].reshape(1, -1))))
#create columns names by range
L = ['l', 'h']
df.columns = ['{}{}'.format(x, y) for y in range(1, k+1) for x in L]
print (df)
   l1  h1  l2  h2  l3  h3
0   7   1   8   3   9   5
1   5   4   3   3   6   5