【问题标题】:For loop isn't printing existing common values between two dataframesFor 循环不打印两个数据帧之间的现有公共值
【发布时间】:2020-01-21 05:03:13
【问题描述】:

所以我有两个数据集,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)

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

【问题讨论】:

  • 如果在每次迭代中打印 i 和 v 的值会怎样?
  • 你有dfs的样本吗?
  • 您不会比较相同的数据类型。请注意,您这样做了:对于 dict1.iteritems() 中的 i,v,然后将其与 dict() 中的 v 进行比较。您应该将 dict1().iteritems() 与 dict2.iteritems() 或 dict1.values() 与 dict2.values() 进行比较。

标签: python pandas loops for-loop


【解决方案1】:

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

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)

【讨论】:

  • 这给了我想要的结果!但是,仍然想知道为什么我的原始代码在理论上不起作用
  • 我添加了部分来展示你的代码是如何工作的,检查一下:)
  • @TheFutureNav 可以轻松添加.values:if v in drinks['Beverage'].values
  • 不客气 :) 如果答案解决了你的问题,请考虑接受meta.stackexchange.com/questions/5234/…
【解决方案2】:

获取具有共同值的列

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    相关资源
    最近更新 更多