我有一个由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,然后将它们连接在一起。问题是,我无法使用循环中的' {}' .format(i)语法创建具有不同名称的新df,但由于某种原因它并不喜欢它。
答案 0 :(得分:1)
试试这个:
df.groupby('Feature')['Value'].apply(lambda x: pd.Series(x.tolist())).unstack().add_prefix('Value_')
使用groupby
,apply
和unstack
。
答案 1 :(得分: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