Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于其他'的新行;s行过去值到当前值_Python_Pandas_Dataframe_Conditional Statements_Shift - Fatal编程技术网

Python 基于其他'的新行;s行过去值到当前值

Python 基于其他'的新行;s行过去值到当前值,python,pandas,dataframe,conditional-statements,shift,Python,Pandas,Dataframe,Conditional Statements,Shift,我正试图在df中创建一个名为move的新列,如果x中的值高于其先前的值,则该列给出1的值,如果值低于则给出0,因此move中的第一个值应该是NaN d = {'x': [1, 0, 2, 5, 4]} df = pandas.DataFrame(d) 该列应如下所示: df['move'] = pandas.Series([NaN, 0, 1, 1, 0]) 您可以使用shift与使用iloc的列片段进行比较,并使用astype将布尔序列转换为数字数据类型: In [82]: df['mov

我正试图在
df
中创建一个名为
move
的新列,如果
x中的值高于其先前的值,则该列给出
1
的值,如果
值低于
则给出
0
,因此
move
中的第一个值应该是
NaN

d = {'x': [1, 0, 2, 5, 4]}
df = pandas.DataFrame(d)
该列应如下所示:

df['move'] = pandas.Series([NaN, 0, 1, 1, 0])

您可以使用
shift
与使用
iloc
的列片段进行比较,并使用
astype
将布尔序列转换为数字数据类型:

In [82]:
df['move'] = (df['x'].iloc[1:] > df['x'].iloc[1:].shift()).astype(int)
df

Out[82]:
   x  move
0  1   NaN
1  0   0.0
2  2   1.0
3  5   1.0
4  4   0.0

请注意,
NaN
的存在迫使这里的数据类型为
float

我认为您需要与列
x
中的ed值进行比较,最后您可以将第一个值更改为
NaN
(如有必要):

计时

d = {'x': [1, 0, 2, 5, 4]}
df = pd.DataFrame(d)
df = pd.concat([df]*10000).reset_index(drop=True)
df1 = df.copy()

def jez(df):
    df['move'] = (df.x > df.x.shift()).astype(int)
    df.ix[0, 'move'] = np.nan
    return df

def edch(df):
    df['move'] = (df['x'].iloc[1:] > df['x'].iloc[1:].shift()).astype(int)
    return df

print (jez(df))
print (edch(df1))
len(df)=50k

In [82]: %timeit (edch(df1))
100 loops, best of 3: 3.99 ms per loop

In [83]: %timeit (jez(df))
1000 loops, best of 3: 1.44 ms per loop
计时代码

d = {'x': [1, 0, 2, 5, 4]}
df = pd.DataFrame(d)
df = pd.concat([df]*10000).reset_index(drop=True)
df1 = df.copy()

def jez(df):
    df['move'] = (df.x > df.x.shift()).astype(int)
    df.ix[0, 'move'] = np.nan
    return df

def edch(df):
    df['move'] = (df['x'].iloc[1:] > df['x'].iloc[1:].shift()).astype(int)
    return df

print (jez(df))
print (edch(df1))