首页 > 解决方案 > 熊猫数据框比较相同的键

问题描述

嗨,我想比较熊猫数据框的相同键。

值(字典)
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'])

标签: pythonpandasdataframe

解决方案


您可以从值列中存在的字典创建一个新的数据框,然后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

推荐阅读