我有以下pandas.core.series.Series

Color
Red      4
Green    7


以及以下多索引数据框。我的目标是通过检查数据框中的Target列是否小于Value中的相应颜色值来在数据框中创建pandas.core.series.Series列,如果是,则返回1。例如,在第一行中,数据框内Value列中的值为12,该值大于熊猫系列对象中对应的匹配索引值4,因此Target返回0。

              Value    Target
Color Animal
Red   Tiger      12      0
      Tiger      3       1
Green Lion       6       1
      Lion       35      0


我下面的尝试得到一个ValueError: Can only compare identically-labeled Series objects

import pandas as pd
import numpy as np
x = pd.Series([4,7], index=['Red','Green'])
x.index.name = 'Color'

dt = pd.DataFrame({'Color': ['Red','Red','Green','Green'], 'Animal': ['Tiger','Tiger','Lion','Lion'],  'Value': [12,3,6,35]})
dt.set_index(['Color','Animal'], inplace=True)
dt['Target'] = np.where(dt['Value'] < x ,1 ,0 )

最佳答案

使用lt代替运算符,然后指定轴。

dt['Target'] = dt['Value'].lt(x, axis=0).astype(int)
print (dt)
              Value  Target
Color Animal
Red   Tiger      12       0
      Tiger       3       1
Green Lion        6       1
      Lion       35       0


lt =“小于”

关于python - 将不相同的 Pandas 数据框与一系列对象进行比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52249017/

10-11 06:48
查看更多