python - 如何在熊猫中引用数组中的顺序值
问题描述
我正在尝试在满足两个条件时吐出 1 的数据框中创建一个新列:(1)相邻列中的单元格大于 0 和(2)相邻列中的单元格,前一行是也大于0。这是代码:
def rule(x, y):
if x > 0 and y > 0:
return 1
else:
return 0
df = pd.DataFrame({ 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]})
df['new'] = df.apply(lambda x: rule(x['c2'], x['c2']), axis = 1)
df.head()
我不确定应该如何编写 lambda 函数中的数组引用,但这或多或少是我认为 lambda 函数的样子。
解决方案
使用shift
功能构造一个临时列,然后apply
像这样使用:
df = pd.DataFrame({ 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]})
df['c2_shifted'] = df['c2'].shift(1)
def rule(row):
return row['c2']>0 and row['c2_shifted'] > 0
df['new'] = df.apply(rule, axis = 1)