转置数据框中的子集列(不是groupby,需要创建新列)

时间:2013-06-11 14:04:33

标签: python dataframe pandas transpose

我有一个有两列的表,第一列是站点的指示,第二列是24小时内每小时的状态数。因此,对于每个站点,我有24(行)x2(列)数据。如何将第二列(每个站点24行数据)转换为包含24 + 1列和站点指示的行。

我通过使用循环创建新行找到了一个天真的解决方案:

for i in range(numberOfsites):
    i1 = i*24
    i2 = i1 + 24
    newLine = DataFrame(sitesData,index=list(range(i1,i2)), columns=["siteState"]).T
是否有人可以提出另一个更简单的解决方案?先感谢您。

原始数据:(感谢Andy Hayden的数据)

   site_index state
0           1     a
1           1     b
2           1     a
3           2     a
4           2     a
5           2     b

所需数据:

              0  1  2
  site_index
  1           a  b  a
  2           a  a  b

1 个答案:

答案 0 :(得分:2)

虽然这有点像hacky,但你可以使用groupby

In [11]: df
Out[11]:
   site_index state
0           1     a
1           1     b
2           1     a
3           2     a
4           2     a
5           2     b

In [12]: g = df.groupby('site_index')

In [13]: g.apply(lambda x: x.state.reset_index(drop=True).T)
Out[13]:
            0  1  2
site_index
1           a  b  a
2           a  a  b

使用unstack ...

也可以