0

所以我有两个数据集,drinks 和drinks2,关于星巴克饮料的营养信息,每个数据集都有一组不同的饮料作为观察值。

饮料列:

['Beverage', 'Calories', 'Fat (g)', 'Carb. (g)', 'Fiber (g)','Protein (g)', 'Sodium (g)']

饮料列2:

['Beverage_category', 'Beverage', 'Beverage_prep', 'Calories', 'Fat (g)','Trans Fat (g)', 'Saturated Fat (g)', 'Sodium (g)', 'Carb. (g)', 'Cholesterol (mg)', 'Fiber (g)', 'Sugars (g)', 'Protein (g)','Vitamin A (% DV)', 'Vitamin C (% DV)', 'Calcium (% DV)', 'Iron (% DV)', 'Caffeine (mg)']

将两个数据集合并到它们的公共'Beverage'列上后,新数据集的'Beverage'列由三个值的多次出现组成;拿铁咖啡、焦糖玛奇朵、卡布奇诺咖啡,这表示在初始数据帧的两个原始“饮料”列中都存在这些值,并且它们的存在通过手动检查得到确认。

但是,当尝试使用以下 for 循环打印出公共值时:

for i, v in drinks2['Beverage'].iteritems():
    if v in drinks['Beverage']:
        print(v)

输出上没有显示任何内容。两个饮料列之间有共同的值,但没有打印任何内容。知道为什么吗?

4

2 回答 2

0

获取具有共同值的列

import pandas as pd


d1 = {'Beverage': ['Beverage', 'Calories', 'Fat (g)', 'Carb. (g)', 'Fiber (g)','Protein (g)', 'Sodium (g)',]}
d2 = {'Beverage': ['Beverage_category', 'Beverage', 'Beverage_prep', 'Calories', 'Fat (g)','Trans Fat (g)',
      'Saturated Fat (g)', 'Sodium (g)', 'Carb. (g)', 'Cholesterol (mg)', 'Fiber (g)',
      'Sugars (g)', 'Protein (g)','Vitamin A (% DV)', 'Vitamin C (% DV)', 'Calcium (% DV)',
      'Iron (% DV)', 'Caffeine (mg)',]}


df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)


dx = pd.merge(df1, df2, on='Beverage', how='inner')

使您的代码正常工作

print([i for i in sum(d1.values(),[]) if i in sum(d2.values(), [])])
于 2019-09-20T07:09:14.817 回答
0

要查找常见元素,您可以改用:

import numpy as np    
np.intersect1d(drinks['Beverage'], drinks2['Beverage'])

如果你想让你的代码工作,你可以使用这个:

 for v in drinks2['Beverage']:
    if v in drinks['Beverage'].values:
        print(v)

或者:

for i, v in drinks2['Beverage'].iteritems():
    for j, w in drinks['Beverage'].iteritems():
        if v == w:
            print(v)

或者:

for v in drinks2['Beverage']:
    for w in drinks['Beverage']:
        if v == w:
            print(v)
于 2019-09-20T07:10:58.213 回答