For循环没有在两个数据帧之间打印现有的公共值

2024-10-04 05:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有两个数据集,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'列包含三个值的多次出现:Caffe Latte、Caramel Macchiato、Cappuccino,这表示这些值出现在初始数据帧中的两个原始“饮料”列中,人工检查确认其存在。你知道吗

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

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

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


Tags: 数据forfatproteindv饮料fibermg
2条回答

要查找公共元素,可以使用:

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)

获取具有公共值的列

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(), [])])

相关问题 更多 >