熊猫数据帧比较相同的键

时间:2021-03-06 14:20:02

标签: python pandas dataframe

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

<头>
汽车 values(dict)
0 audi1 {'colour': 'black', 'PS': '3', 'owner': 'peter'}
1 audi2 {'owner': 'fred', 'colour': 'black', 'PS': '230', 'number': '3'}
2 福特 {'windows': '3', 'PS': '3', 'owner': 'peter'}
3 宝马 {'colour': 'black', 'windows': 'no', 'owner': 'peter', 'number': '3'}

想要的解决方案

<头>
颜色 owner PS 数字 windows
黑色 3 0 0 0 0
peter 0 3 0 0 0
3 0 0 2 2 1
fred 0 1 0 0 0
no 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'])

1 个答案:

答案 0 :(得分:2)

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