Pandas - 不同字符串之间的比较总是返回True

时间:2018-05-18 14:57:59

标签: python pandas

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

//Data
foreach($result as $key => $row)
{
    echo '<tr>';
    foreach($order as $key) {
        echo '<td>' . ($row[$key] ?? '') . '</td>';
    }
    echo '</tr>';
}

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

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

Pandas comparison

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

摆脱.values[0],它只选择一个特定的值(因此,当然,总是返回相同的值)。

import pandas as pd
df = pd.DataFrame(['IBM', 'IBM', 'Apple'], columns=['company'])
df['shift_minus_1'] = df['company'].shift(-1)
df['comparison'] = df['company'].shift(-1) == df['company']

返回

Out[92]: 
  company shift_minus_1  comparison
0     IBM           IBM        True
1     IBM         Apple       False
2   Apple           NaN       False