2017-06-15 55 views

回答

1

考慮數據框df

np.random.seed(1) 
df = pd.DataFrame(np.random.rand(10, 2), columns=list('AB')) 

df 

      A   B 
0 0.417022 0.720324 
1 0.000114 0.302333 
2 0.146756 0.092339 
3 0.186260 0.345561 
4 0.396767 0.538817 
5 0.419195 0.685220 
6 0.204452 0.878117 
7 0.027388 0.670468 
8 0.417305 0.558690 
9 0.140387 0.198101 

選項1
cumminshift
這裏的概念是跟蹤的最低值是什麼,到目前爲止爲每列。如果特定行上的值小於前一行及其之前的所有行,則它必須是新的最小值。我們可以通過檢查它是否小於前一行中的最小值來判斷這是否爲True
注意這應該工作得很好,與NaN值。

df.assign(New=(df < df.cummin().shift()).all(1).astype(int)) 

      A   B New 
0 0.417022 0.720324 0 
1 0.000114 0.302333 1 
2 0.146756 0.092339 0 
3 0.186260 0.345561 0 
4 0.396767 0.538817 0 
5 0.419195 0.685220 0 
6 0.204452 0.878117 0 
7 0.027388 0.670468 0 
8 0.417305 0.558690 0 
9 0.140387 0.198101 0 

選項2
numpy
numpy.minimum

v = df.values 
c = np.minimum.accumulate(v[:-1], axis=0) 
df.assign(New=np.append(False, (v[1:] < c).all(1)).astype(int)) 

      A   B New 
0 0.417022 0.720324 0 
1 0.000114 0.302333 1 
2 0.146756 0.092339 0 
3 0.186260 0.345561 0 
4 0.396767 0.538817 0 
5 0.419195 0.685220 0 
6 0.204452 0.878117 0 
7 0.027388 0.670468 0 
8 0.417305 0.558690 0 
9 0.140387 0.198101 0 
+1

@MukarramPasha也許,但我沒有想到一種方法來做到這一點。在這個問題中,我關心我當前的行相對於之前的每一行。我不關心與之前的每一行相關的前一行。到目前爲止,與累積最低值比較似乎是最好的方法。 – piRSquared

+0

哦,我明白了,謝謝。 *道歉,我錯誤地刪除了我的第一條評論。 –

+0

@MukarramPasha如果你喜歡或欣賞答案,我們誰迴應愛情票...只是說' – piRSquared

0

使用@ piRsuared的DF:

np.random.seed(1) 
df = pd.DataFrame(np.random.rand(10, 2), columns=list('AB')) 
Out[31]: 
      A   B 
0 0.417022 0.720324 
1 0.000114 0.302333 
2 0.146756 0.092339 
3 0.186260 0.345561 
4 0.396767 0.538817 
5 0.419195 0.685220 
6 0.204452 0.878117 
7 0.027388 0.670468 
8 0.417305 0.558690 
9 0.140387 0.198101 

您可以使用apply將當前行與前面所有行的最大值進行比較,然後將結果轉換爲int。

df.apply(lambda x: (x<df[0:x.name].max()).all().astype(int),axis=1) 
Out[30]: 
0 0 
1 1 
2 1 
3 1 
4 1 
5 0 
6 0 
7 1 
8 1 
9 1 
dtype: int64 
+0

我想將min()邏輯應用於上面的命令,並且它完美地工作。但讓我們說我有一個5行和5列的數據框。如果第一行中的第二列和第三列是Nan,那麼對於第三行,此邏輯不起作用。 (如果前一行有南),對於下一行邏輯不起作用!我如何處理這個問題? – Harikrishna

+0

任何人都知道如何使邏輯工作在我的情況。如果在我之前的行中,其中一列是Nan,則應該忽略它,並且必須將所有其他列與前一行進行比較。任何幫助將不勝感激 – Harikrishna

相關問題