我想比较两个不同列上的相邻行。我有一个dataframe
,其中有两列,Letter
和Boolean_Value
。我想创建一个新列New Col
,其值为True
或False
。
要使值为真:
下一行(较高的索引)必须共享相同的Letter
值,下一行必须具有Boolean_Value
的真。
表示该值为false:
所有其他方案
我的代码,产生所有错误值:
import pandas as pd
df = pd.DataFrame(data=[['A', False],
['A', True],
['B', False],
['B', False],
['B', True]]
,columns=['Letter', 'Boolean_Value'])
def my_test2(row):
try:
if row['Letter'].shift(1) == row['Letter'] and row['Boolean_Value'].shift(1) == True:
return True
else:
return False
except:
return False
df['New Col'] = df.apply(my_test2, axis=1)
print df
收率:
Letter Boolean_Value New Col
0 A False False
1 A True False
2 B False False
3 B False False
4 B True False
期望的输出:
Letter Boolean_Value New Col
0 A False True
1 A True False
2 B False False
3 B False True
4 B True False
答案 0 :(得分:2)
你可以:
df['new_col'] = (df.Letter == df.Letter.shift(-1)) & df.Boolean_Value.shift(-1)
Letter Boolean_Value new_col
0 A False True
1 A True False
2 B False False
3 B False True
4 B True False
答案 1 :(得分:1)
试试这个:
import pandas as pd
df = pd.DataFrame(data=[['A', False],
['A', True],
['B', False],
['B', False],
['B', True]]
,columns=['Letter', 'Boolean_Value'])
df['New Col'] = df['Letter'] == df['Letter'].shift(-1)
df['New Col'] = df['New Col'] != df['Boolean_Value'].shift(1)
print(df)