我有一个包含以下列的 Dataframe
import pandas as pd
df = pd.DataFrame({'num': [1, 2, 2, 3, 4, 5, 6]})
我想创建一个列,它使用df['num'].shift()
来比较当前单元格的值和它下面的单元格的值,如果它匹配,那么值应该是True或False。
预期输出:
num matches?
0 1 False
1 2 True
2 2 False
3 3 False
4 4 False
5 5 False
6 6 False
我无法找到迭代每个单元格并比较条件的最佳方法,当我使用以下命令时:
df['matches?'] = ''
for i in range(len(df)):
if df['num'] == df['num'].shift(1):
df['matches?'] = True
else:
df['matches?'] = False
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
如何以最简单的方式做到这一点?
4条答案
按热度按时间6ojccjat1#
当你使用
shift
时,你不需要循环,操作是向量化的,并为你做:输出:
编辑
如果你想保持循环逻辑:
输出:
e7arh2l62#
当您处理数值时,可以使用
diff
在两行之间进行计算,请参阅下面的代码1aaf6o9v3#
保持for循环不变。你可以试试这个
您应该遍历
len(df)-1
,因为当循环到达最后一行时,在它之后将没有什么可比较的。它会在那里抛出索引错误。输出
watbbzwu4#
您也可以添加elif和实现打破逻辑3节如下所述