Python:我想根据另一列中的条件转置一列

时间:2019-03-10 06:21:59

标签: python pandas

我可以肯定已经问过这个问题了(因为这是一个常见问题),但是我找不到它。

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

ID     Name
1      A
1      B
2      X
2      Y
2      Z

我想要这种格式(我不在乎列名)

1    A    B
2    X    Y   Z  and so on...

2 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

df_new=df.groupby('ID')['Name'].apply(lambda x: ','.join(list(x))).reset_index()
df_new.join(df_new.pop('Name').str.split(",",expand=True))

   ID  0  1     2
0   1  A  B  None
1   2  X  Y     Z

答案 1 :(得分:0)

可以通过以下代码创建所需的内容。

    data = [[1,'A'] , [1 , 'B'] , [2 , 'X'] , [2 , 'Y'] , [2 , 'Z']]  
    df = pd.DataFrame(data , columns=['ID' , 'Name'])

    id_list = df['ID'][~df['ID'].duplicated()]
    t_rows = []
    max_val_num = 0
    for id_ in id_list:
        row = df[df['ID'] == id_]['Name'].tolist()
        t_rows.append(row)
        if len(row) >= max_val_num:
            max_val_num = len(row)

    df_transform = pd.DataFrame(t_rows , columns=['col_'+str(i) for i in range(max_val_num)])  
    print(df_transform)