Цикл For не печатает существующие общие значения между двумя кадрами - PullRequest
0 голосов
/ 20 сентября 2019

Итак, у меня есть два набора данных, напитков и напитков2, о питательной информации напитков в Starbucks, каждый из которых имеет различный набор напитков в качестве наблюдений.

Столбцы напитков:

['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 i, v in drinks2['Beverage'].iteritems():
    if v in drinks['Beverage']:
        print(v)

Ничего не отображается на выходе.Есть общие значения между двумя колонками напитка, и все же ничего не напечатано.Есть идеи почему?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Чтобы найти общие элементы, вы можете использовать вместо:

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)
0 голосов
/ 20 сентября 2019

, чтобы получить столбец с общими значениями

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(), [])])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...