gpt4 book ai didi

python - pandas:以排名为中心

转载 作者:行者123 更新时间:2023-12-01 04:01:24 25 4
gpt4 key购买 nike

鉴于此数据:

pd.DataFrame({'id':['aaa','aaa','abb','abb','abb','acd','acd','acd'],
'loc':['US','UK','FR','US','IN','US','CN','CN']})

id loc
0 aaa US
1 aaa UK
2 abb FR
3 abb US
4 abb IN
5 acd US
6 acd CN
7 acd CN

我如何将其转向此:

 id   loc1   loc2   loc3
aaa US UK None
abb FR US IN
acd US CN CN

我正在寻找最惯用的方法。

最佳答案

我认为您可以使用 groupby 创建新列 cols , cumcount并通过 astype 转换为 string ,上次使用pivot :

df['cols'] = 'loc' + (df.groupby('id')['id'].cumcount() + 1).astype(str)
print df
id loc cols
0 aaa US loc1
1 aaa UK loc2
2 abb FR loc1
3 abb US loc2
4 abb IN loc3
5 acd US loc1
6 acd CN loc2
7 acd CN loc3

print df.pivot(index='id', columns='cols', values='loc')
cols loc1 loc2 loc3
id
aaa US UK None
abb FR US IN
acd US CN CN

如果要删除索引和列名称,请使用 rename_axis :

print df.pivot(index='id', columns='cols', values='loc').rename_axis(None)
.rename_axis(None, axis=1)
loc1 loc2 loc3
aaa US UK None
abb FR US IN
acd US CN CN

大家一起,谢谢Colin :

print pd.pivot(df['id'], 'loc' + (df.groupby('id').cumcount() + 1).astype(str), df['loc'])
.rename_axis(None)
.rename_axis(None, axis=1)

loc1 loc2 loc3
aaa US UK None
abb FR US IN
acd US CN CN

我尝试rank ,但我在版本 0.18.0 中收到错误:

print df.groupby('id')['loc'].transform(lambda x: x.rank(method='first'))
#ValueError: first not supported for non-numeric data

关于python - pandas:以排名为中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36439311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com