python - 来自两个数据帧的共现矩阵。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 创建一个共现矩阵,但我不知道如何绑定两个数据框。
谢谢你。
解决方案
我想你想要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
推荐阅读
- scala - 类文件中的常量池数据不一致
- java - 如何使用整数参数的二进制表示过滤数组?
- jenkins - 詹金斯管道:当条件和水银标签
- c# - Postgres 10 池化问题
- c++ - 可以编译 Gtk+ 应用程序以在 Gtk 2 和 3 上运行吗
- postgresql - 如何在以前使用 JPA 的项目中使用 R2DBC 实现 OneToMany、ManyToOne 和 ManyToMany?
- python - 如何使用python在excel中通过行划分数据
- android - 在没有互联网的情况下插入mysql
- java - 无法从另一个类中获取 ArrayList。它总是空的
- magento - Magneto 2.3.3 db 可以与 Magento 2.0.8 一起使用吗?