当我使用np时,如果每个第二列的值都大于上一个列的值,我试图创建一个矩阵,如果第二个列的值大于前一个列的值,则创建一个矩阵。它只是展平它要保留第一列和最后一列它的形状。
df = pd.DataFrame(np.random.randn(8, 4),columns=['A', 'B', 'C', 'D'])
newd=pd.DataFrame()
for x in df.columns[1::2]:
if bool(df.iloc[:,df.columns.get_loc(x)] <=
df.iloc[:,df.columns.get_loc(x)-1]):
newdf.append(1)
else:newdf.append(0)
答案 0 :(得分:1)
这个问题有点模糊,但是我会回答一个我认为是您所问问题的核心的问题:
假设您从矩阵开始:
df1 = pd.DataFrame(np.random.randn(8, 4),columns=['A', 'B', 'C', 'D'])
哪个创建:
A B C D
0 2.464130 0.796172 -1.406528 0.332499
1 -0.370764 -0.185119 -0.514149 0.158218
2 -2.164707 0.888354 0.214550 1.334445
3 2.019189 0.910855 0.582508 -0.861778
4 1.574337 -1.063037 0.771726 -0.196721
5 1.091648 0.407703 0.406509 -1.052855
6 -1.587963 -1.730850 0.168353 -0.899848
7 0.225723 0.042629 2.152307 -1.086585
现在,您可以使用pd.df.shift()
移动整个矩阵,然后一步一步地检查结果列。例如:
df1.shift(1)
创建:
A B C D
0 -0.370764 -0.185119 -0.514149 0.158218
1 -2.164707 0.888354 0.214550 1.334445
2 2.019189 0.910855 0.582508 -0.861778
3 1.574337 -1.063037 0.771726 -0.196721
4 1.091648 0.407703 0.406509 -1.052855
5 -1.587963 -1.730850 0.168353 -0.899848
6 0.225723 0.042629 2.152307 -1.086585
7 NaN NaN NaN NaN
现在您可以使用新矩阵检查结果列:
df2 = df1.shift(-1) > df1
返回:
A B C D
0 False False True False
1 False True True True
2 True True True False
3 False False True True
4 False True False False
5 False False False True
6 True True True False
7 False False False False
为完成您的问题,我们将True / False转换为1/0,如下所示:
df2 = df2.applymap(lambda x: 1 if x == True else 0)
哪个返回:
A B C D
0 0 0 1 0
1 0 1 1 1
2 1 1 1 0
3 0 0 1 1
4 0 1 0 0
5 0 0 0 1
6 1 1 1 0
7 0 0 0 0
一行:
df2 = (df1.shift(-1)>df1).replace({True:1,False:0})