【问题标题】:Transform non numeric rows into columns with custom column name将非数字行转换为具有自定义列名的列
【发布时间】:2017-11-09 10:55:46
【问题描述】:

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

    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

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    让我们试试这个:

    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
    

    【讨论】:

    • 完美,这行得通,现在去谷歌搜索unstackdroplevel()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多