python - 熊猫数据框比较相同的键
问题描述
嗨,我想比较熊猫数据框的相同键。
车 | 值(字典) | |
---|---|---|
0 | 奥迪1 | {'颜色':'黑色','PS':'3','所有者':'彼得'} |
1 | 奥迪2 | {“所有者”:“弗雷德”,“颜色”:“黑色”,“PS”:“230”,“编号”:“3”} |
2 | 福特 | {'windows':'3','PS':'3','所有者':'彼得'} |
3 | 宝马 | {'color': 'black', 'windows': 'no', 'owner': 'peter', 'number': '3'} |
想要的解决方案
颜色 | 所有者 | 附言 | 数字 | 视窗 | |
---|---|---|---|---|---|
黑色的 | 3 | 0 | 0 | 0 | 0 |
彼得 | 0 | 3 | 0 | 0 | 0 |
3 | 0 | 0 | 2 | 2 | 1 |
弗雷德 | 0 | 1 | 0 | 0 | 0 |
不 | 0 | 0 | 0 | 0 | 1 |
我希望我的问题是可以理解的
d = {'audi1': {'colour': 'black', 'PS': '3', 'owner': 'peter'}, 'audi2': {'owner': 'fred', 'colour': 'black', 'PS': '230', 'number': '3'}, 'ford': {'windows': '3', 'PS': '3', 'owner': 'peter'}, 'bmw': {'colour': 'black', 'windows': 'no', 'owner': 'peter', 'number': '3'}}
df = pd.DataFrame(d.items(), columns=['car', 'values'])
解决方案
您可以从值列中存在的字典创建一个新的数据框,然后stack
是要重塑的框架,最后用于crosstab
创建频率表:
s = pd.DataFrame(df['values'].tolist()).stack()
table = pd.crosstab(s, s.index.get_level_values(1))
替代但类似的方法groupby
+value_counts
后跟unstack
重塑:
s = pd.DataFrame(df['values'].tolist()).stack()
table = s.groupby(level=1).value_counts().unstack(level=0, fill_value=0)
>>> table
PS colour number owner windows
230 1 0 0 0 0
3 2 0 2 0 1
black 0 3 0 0 0
fred 0 0 0 1 0
no 0 0 0 0 1
peter 0 0 0 3 0
推荐阅读
- reactjs - React Native:tabBarVisible 选项设置为 false 但不隐藏 tabBar
- docusignapi - Docusign webhooks SignMessageWithX509Cert mTLS
- java - 确保 gRPC 双向流式消息到达客户端
- javascript - 如何在 React js 中以模块化方式使用动态样式
- c# - 在 Xamarin 中显示相机流
- spring-boot - Elasticsearch Spring boot 设置匹配文本百分比
- sql - 从历史表中提取数据只保留有变化的数据
- tensorflow - tfserving 中是否有任何函数或 api 用于重新加载加载的特定版本模型?
- gimp - 如何使用 script-fu 更改 GIMP 打印大小
- php - 得到以下代码的奇怪输出。我需要解释它如何计算输出