我有以下DataFrame。描述每个用户所居住的城市
City Name
0 Seattle Alice
1 Seattle Bob
2 Portland Mallory
3 Seattle Mallory
4 Memphis Bob
5 Portland Mallory
熊猫可以实现以下目标吗?
Name City1 City2 City3
0 Alice Seattle NaN Nan
1 Bob Seattle Memphis Nan
2 Mallory Portland Seattle Portland
非常感谢!
答案 0 :(得分:2)
您可以通过以下方式执行此操作:
map
通过在这些字符串的开头添加"City"
字符来格式化字符串。unstack
设为DF
。此外,使用None
参数NaN
可以替换fill_value
值。cc = df.groupby('Name')['City'].cumcount().add(1).map('City{}'.format)
df.set_index(['Name', cc])['City'].unstack(fill_value=np.nan).reset_index()
答案 1 :(得分:1)
这里有一种方式
In [619]: df.groupby('Name')['City'].apply(list).apply(pd.Series)
Out[619]:
0 1 2
Name
Alice Seattle NaN NaN
Bob Seattle Memphis NaN
Mallory Portland Seattle Portland
对于列名称,请使用rename
和format
In [628]: (df.groupby('Name')['City'].apply(list).apply(pd.Series)
.rename(columns=lambda x: 'City{}'.format(x+1)))
Out[628]:
City1 City2 City3
Name
Alice Seattle NaN NaN
Bob Seattle Memphis NaN
Mallory Portland Seattle Portland