将非数字行转换为具有自定义列名称的列

时间:2017-06-07 22:15:24

标签: python pandas

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

    df = pd.DataFrame([['7690d79f','Pos'],['7690d79f','Neg'],['7690d79f','Pos'],['7690d79f','Neu'],\
                       ['6690d79f','Pos'],['6690d79f','Neg'],['6690d79f','Pos'],['6690d79f','Neu']]\
                       ,columns=['id', 'vote'])

是:

    id         vote
0   7690d79f    Pos
1   7690d79f    Neg
2   7690d79f    Pos
3   7690d79f    Neu
4   6690d79f    Pos
5   6690d79f    Neg
6   6690d79f    Pos
7   6690d79f    Neu

我想将行数转移到列,这样我得到一个resultDF为

id  vote_1 vote_2 vote_3 vote_4
7690d79f Pos  Neg Pos Neu
6690d79f Pos  Neg Pos Neu

如果有帮助,每个ID不超过4票。

虽然这与

类似
  1. Python Pandas: Convert Rows as Column headers

  2. Convert row to column in Python Pandas

  3. 但不幸的是,它们都不适合我。

1 个答案:

答案 0 :(得分:2)

我们试试这个:

df1 = df.groupby('id')['vote'].apply(lambda x: pd.DataFrame(x.tolist())).unstack()
df1.columns = df1.columns.droplevel().values + 1
df1.add_prefix('vote_').reset_index()

输出:

         id vote_1 vote_2 vote_3 vote_4
0  6690d79f    Pos    Neg    Pos    Neu
1  7690d79f    Pos    Neg    Pos    Neu