python - 将 DataFrame 的列转换为字典键
问题描述
我试图将三列 DataFrame 转换为字典键。
我试图使用循环来转换每一列并跟踪工人的血型。血型不应该重复。
Name = df[:,['Name1','Name2','Name3']]
Names = {}
Bloodtypes = {}
for i,key,key2 in enumerate(zip(...)):
if key in Names[key] and key in Blood types[key]:
Names[key].append(i)
Blood types[key].append(key2)
else:
Names[key]=[i]
Blood types[key]=[key2]
Blood Type Name1 Name2 Name3
0 A NaN NaN John
1 O Adam Smith NaN
2 B NaN John NaN
3 AB NaN NaN NaN
4 A NaN NaN NaN
5 B NaN NaN NaN
我期待以下。
Bloodtypes = {"Blank":['AB','A','B'],""John":['A','B'],("Adam","Smith"):['O']}
Names = {"Blank":[3,4,5],""John":[0,2],("Adam","Smith"):[1]}
解决方案
这里我们使用stack
创建新密钥,然后groupby
to_dict
df['Newkey']=df[['Name1','Name2','Name3']].stack().groupby(level=0).apply(tuple)
df.Newkey=df.Newkey.fillna('Blank')
df.groupby('Newkey')['BloodType'].apply(list).to_dict()
Out[471]: {'Blank': ['AB', 'A', 'B'], ('John',): ['A', 'B'], ('Adam', 'Smith'): ['O']}
df.reset_index().groupby('Newkey')['index'].apply(list).to_dict()
Out[472]: {'Blank': [3, 4, 5], ('John',): [0, 2], ('Adam', 'Smith'): [1]}
推荐阅读
- java - 如何在应用程序顶部显示底部导航视图?
- python - 在 Pandas 中,如何按键中的每 N 行进行分组,保存一列的最后一个值并根据该“集合”中的所有行计算另一个值?
- node.js - 猫鼬:在 X 集合中创建新元素,在 Y 集合中更新另一个元素
- ruby-on-rails - 如何在 Windows 10 上将 MariaDB 与 Rails 一起使用?
- lua - 此表语法的含义
- javascript - 如何在页面完成加载时发出 AJAX 请求,由 window.location.href 触发
- machine-learning - 机器学习模型不适用于连续数据
- python-3.x - 如何设置 Anaconda 使其不会影响 MacOS 上的“homebrew python pip”和 Pyenv 等其他环境?
- amazon-web-services - 如何在没有开发端点的情况下测试 AWS Glue 代码
- php - PhpStorm 与 Selenium 一起使用 - 注册文件类型