我正在尝试将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)
答案 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