python - Pandas:根据列表设置值
问题描述
我的数据框是这样的:
a b
0 123
0 321
0 456
12345 1234
43241 132
0 2134
12345 6543
43241 987
....
我需要根据列表在第三列中设置值(编辑:a
不一定是有序的):
a 0 12345 43241 ....
c 0 1 2 ....
所以它应该变成
a b c
0 123 0
0 321 0
0 456 0
12345 1234 1
43241 132 2
0 2134 0
12345 6543 1
43241 987 2
....
目前我正在循环执行此操作:
a=data['a'].unique().tolist()
c=list(range(len(a)))
d=dict(zip(c,a))
df['c']=0
for i in d:
df.loc[df['a']==d[i],'c']=i
有没有更简单的方法来做到这一点?
解决方案
您可以使用pandas.factorize
:
df['c'] = pd.factorize(df['a'])[0]
print(df)
a b c
0 0 123 0
1 0 321 0
2 0 456 0
3 12345 1234 1
4 43241 132 2
5 0 2134 0
6 12345 6543 1
7 43241 987 2
推荐阅读
- apache-kafka - 来自数据库的 KAFKA 初始加载
- microsoft-graph-api - MS Graph API:webUrl 到 driveItem
- ansible - 具有受限 Sudo 访问权限的特权 Ansible 命令
- docker - 服务名称和泊坞窗堆栈
- reactjs - 没有状态或道具的反应类吸气剂更新reactjs
- python-3.x - Spotipy current_user_saved_tracks 没有返回任何东西
- python - tfidf 矢量化器输出全部为零
- java - Java Selenium 测试 driver.close() 和 driver.quit() Firefox 问题
- python - 如何在 Pandas Dataframe 中组织 Selenium 中的字符串?
- hyperledger-fabric - 如何在超级账本结构中创建单一组织的网络?