按第一列分组并显示为列

时间:2019-05-24 14:47:56

标签: python pandas pandas-groupby

我环顾了很长一段时间,似乎找不到正确的答案。

我试图按第一列(名称)分组,然后将结果显示为列。任何帮助将不胜感激。

我是编程新手,我们将不胜感激。谢谢。

当前显示

        name    data

0   LAST_1  106.305

1   LAST_DATE_1 20180401

2   LAST_TIME_1 145507000

3   LAST_1  106.256

4   LAST_DATE_1 20180401

5   LAST_TIME_1 155946000

6   LAST_1  106.225

7   LAST_DATE_1 20180401

8   LAST_TIME_1 165947000

9   LAST_1  106.264

10  LAST_DATE_1 20180401

11  LAST_TIME_1 175957000

12  LAST_1  106.303

13  LAST_DATE_1 20180401

14  LAST_TIME_1 185956000

... ... ...

预期结果

LAST_1    LAST_DATE_1     LAST_TIME_1

106.342   20180401        235957000

106.321   20180401        215959000

2 个答案:

答案 0 :(得分:2)

您想在此处设置枢纽。您可以使用pivot_table并从name中提取GroupBy.cumcount来建立索引:

i = df.groupby(df.name).cumcount()
df.pivot_table(index=i, columns=df.name)

 data                         
name   LAST_1 LAST_DATE_1  LAST_TIME_1
0     106.305  20180401.0  145507000.0
1     106.256  20180401.0  155946000.0
2     106.225  20180401.0  165947000.0
3     106.264  20180401.0  175957000.0
4     106.303  20180401.0  185956000.0
5     106.321  20180401.0  195957000.0
6     106.282  20180401.0  205950000.0
7     106.342  20180401.0  215959000.0
8     106.317  20180401.0  225956000.0
9     106.361  20180401.0  235957000.0

答案 1 :(得分:1)

在第一列上使用df.groupby(),在第二列上使用apply列表,然后使用它创建一个数据框并转置:

m=df.groupby('name')['data'].apply(list)
m=pd.DataFrame(m.values.tolist(),index=m.index).T.rename_axis(None,axis=1)
print(m)

    LAST_1  LAST_DATE_1  LAST_TIME_1
0  106.305   20180401.0  145507000.0
1  106.256   20180401.0  155946000.0
2  106.225   20180401.0  165947000.0
3  106.264   20180401.0  175957000.0
4  106.303   20180401.0  185956000.0
5  106.321   20180401.0  195957000.0
6  106.282   20180401.0  205950000.0
7  106.342   20180401.0  215959000.0
8  106.317   20180401.0  225956000.0
9  106.361   20180401.0  235957000.0