首页 > 解决方案 > 来自两个数据帧的共现矩阵。Python

问题描述

我有两个数据框,食物和饮料。

food = {'fruit':['Apple', np.nan, 'Apple'],
        'food':['Cake', 'Bread', np.nan]} 
# Create DataFrame
food = pd.DataFrame(food)

    fruit   food
0   Apple   Cake
1   NaN     Bread
2   Apple   NaN
drink = {'smoothie':['S_Strawberry', 'S_Watermelon', np.nan],
        'tea':['T_white', np.nan, 'T_green']}
# Create DataFrame
drink = pd.DataFrame(drink)

    smoothie        tea
0   S_Strawberry    T_white
1   S_Watermelon    NaN
2   NaN             T_green

这些行代表特定客户。我想制作一个食物和饮料的共现矩阵。

预期结果:(列和 ID 不必按此顺序排列)

               Apple    Bread   Cake
            
S_Strawberry    1.0      NaN    1.0
S_Watermelon    NaN      1.0    NaN
T_white         1.0      NaN    1.0
T_green         1.0      NaN    NaN

到目前为止,我可以为每个 df 创建一个共现矩阵,但我不知道如何绑定两个数据框。

谢谢你。

标签: pythonpandasdataframematrix

解决方案


我想你想要pd.get_dummies和矩阵乘法:

pd.get_dummies(drink). T @ pd.get_dummies(food)

输出:

                       fruit_Apple  food_Bread  food_Cake
smoothie_S_Strawberry            1           0          1
smoothie_S_Watermelon            0           1          0
tea_T_green                      1           0          0
tea_T_white                      1           0          1

您可以通过以下方式摆脱前缀:

pd.get_dummies(drink, prefix='', prefix_sep=''). T @ pd.get_dummies(food, prefix='', prefix_sep='')

输出:

              Apple  Bread  Cake
S_Strawberry      1      0     1
S_Watermelon      0      1     0
T_green           1      0     0
T_white           1      0     1

推荐阅读