Python3数据帧重组

问题描述 投票:1回答:2

我有一个由2列组成的数据框;第一列“要素”包含11个垂直堆叠的唯一值148037次,“值”列具有不同的对应值。

    Feature         Value
0   Way ID          2781002
1   Highway         motorway_link
2   Toll            yes
3   Reference       n/a
4   Bridge          yes
5   County          n/a
6   Name            n/a
7   Name2           n/a
8   Name3           n/a
9   Name4           n/a
10  Name Type       n/a
11  Way ID          2788620
12  Highway         motorway
13  Toll            yes
14  Reference       A 49
15  Bridge          n/a
16  County          n/a
17  Name            n/a
18  Name2           n/a
19  Name3           n/a
20  Name4           n/a
21  Name Type       n/a
22  Way ID          2954156
... ... ...
148026  Name Type   n/a
148027  Way ID      545273699
148028  Highway     motorway
148029  Toll        yes
148030  Reference   A 4
148031  Bridge      n/a
148032  County      n/a
148033  Name        Autoroute de l'Est
148034  Name2       n/a
148035  Name3       n/a
148036  Name4       n/a
148037  Name Type   n/a

我希望以下列方式水平设置数据框:

    Feature         Value_1           Value_2        Value_3
0   Way ID          2781002           2788620        2954156
1   Highway         motorway_link     motorway       motorway
2   Toll            yes               yes            yes       
3   Reference       n/a               n/a            n/a
4   Bridge          yes               yes            no
... ... ...    
10  Name Type       n/a               n/a            n/a

我怎样才能做到这一点?我尝试使用循环并为每个新的11行创建一个新的df / list,然后将它们连接在一起。问题是,我无法使用'{}'创建具有不同名称的新df。格式(i)循环中的语法,由于某种原因它不喜欢它。

python python-3.x pandas loops
2个回答
1
投票

试试这个:

df.groupby('Feature')['Value'].apply(lambda x: pd.Series(x.tolist())).unstack().add_prefix('Value_')

使用groupbyapplyunstack


1
投票

通过使用pivot_table

pd.pivot_table(df,index=df.Feature,columns=df.groupby('Feature').cumcount().add(1),values='Value',aggfunc='sum').add_prefix('Value_')
Out[779]: 
                 Value_1   Value_2  Value_3
Feature                                    
Bridge               yes       n/a     None
County               n/a       n/a     None
Highway    motorway_link  motorway     None
Name                 n/a       n/a     None
Name2                n/a       n/a     None
Name3                n/a       n/a     None
Name4                n/a       n/a     None
NameType             n/a       n/a     None
Reference            n/a       A49     None
Toll                 yes       yes     None
WayID            2781002   2788620  2954156
© www.soinside.com 2019 - 2024. All rights reserved.