python - Pandas - 不同字符串之间的比较始终返回 True

标签 python pandas

我正在尝试将 Pandas 数据框的单元格中的值与其紧邻其下方的单元格进行比较。为了从当前行下方的行获取值,我使用了shift:

df['shift_minus_1'] = df['company'].shift(-1)

但是,当我比较这些值时,Pandas 返回 True,即使某些值显然不匹配。这是我用于比较的代码:

df['comparison'] = df['company'].shift(-1).values[0] == df['company'].values[0]

Pandas comparison

最佳答案

您仅比较数组中的第一个值,而不是整个系列:

df['comparison'] = df['company'].shift(-1) == df['company']

应该可以

你做了什么

df['comparison'] = df['company'].shift(-1).values[0] == df['company'].values[0]

只是比较数组中的第一个元素,这会产生一个标量值,因此它将整个列设置为相同的值

示例:

In[5]:
#data setup
df = pd.DataFrame({'company':['IBM','IBM','IBM','IBM','Apple','Apple','Apple','Apple']})
df['shift'] = df['company'].shift(-1)
df

Out[5]: 
  company  shift
0     IBM    IBM
1     IBM    IBM
2     IBM    IBM
3     IBM  Apple
4   Apple  Apple
5   Apple  Apple
6   Apple  Apple
7   Apple    NaN

df['comparison'] = df['company'].shift(-1) == df['company']
df
Out[6]: 
  company  shift  comparison
0     IBM    IBM        True
1     IBM    IBM        True
2     IBM    IBM        True
3     IBM  Apple       False
4   Apple  Apple        True
5   Apple  Apple        True
6   Apple  Apple        True
7   Apple    NaN       False

只是为了展示你做了什么:

print(df['company'].shift(-1).values[0])
print(df['company'].values[0])
IBM
IBM

关于python - Pandas - 不同字符串之间的比较始终返回 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50414136/

相关文章:

python - dir() 一个 __class__ 属性?

python - 如何将值列表转换为字典列表,并将相同的键添加到每个值?

python - 来自 subprocess.Popen.communicate() 与 stdin 的损坏管道

python - 如何使用 PyMySQL 将 Pandas Dataframe 插入 MySql

python - 使用索引条目之间的索引值查询数据帧

python - 使用列名将列聚合到行

python - 从文本文件中读取非 ASCII 字符

python - 优化 Python 代码 - 由于 pandas.core.series.Series.__getitem__ 造成的开销

python - 计算数据框中多个组的 z 分数

python - 通过 "for"循环拆分 pandas 数据帧会导致错误 : KeyError: 'the label [1] is not in the [index]'