首页 > 解决方案 > 如何在熊猫中引用数组中的顺序值

问题描述

我正在尝试在满足两个条件时吐出 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 函数的样子。

标签: pythonarrayspandasdataframeindexing

解决方案


使用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)


推荐阅读