這是代碼:
import pandas as pd
import numpy as np
df1=pd.DataFrame({'0':[1,0,11,0],'1':[0,11,4,0]})
print(df1.head(5))
df2 = df1.copy()
columns=list(df2.columns)
print(columns)
for i in columns:
idx1 = np.where((df2[i]>0) & (df2[i] < 10))
df2.loc[idx1] = 1
idx3 = np.where(df2[i] == 0)
df2.loc[idx3] = 0
idx2 = np.where(df2[i] > 10)
df2.loc[idx2] = 0
print(df2.head(5))
output:
0 1
0 1 0
1 0 11
2 11 4
3 0 0
['0', '1']
0 1
0 1 1
1 0 0
2 0 0
3 0 0
相關部分是: (idx1 = np.where((df2[i]>0) & (df2[i] < 10)) df2.loc[idx1] = 1,為什么這個邏輯不起作用?)根據這個邏輯,這就是我的輸出:
expected:
0 1
0 1 1
1 0 0
2 0 1
3 0 0
uj5u.com熱心網友回復:
這可以簡單得多。您可以直接對整個資料框進行操作;無需逐列回圈。
此外,您不需要numpy.where獲取索引;您可以直接在選擇中使用帶有布林值的資料框。
sel = (df2 > 0) & (df2 < 10)
df2[sel] = 1
df2[df2 == 0] = 0
df2[df2 > 10] = 0
(第一行只是為了讓第二行不會過于復雜。)
但是,鑒于您的條件,結果是
0 1
0 1 0
1 0 0
2 0 1
3 0 0
因為您只將 0 到 10(不包括)之間的數字設定為 1。像 11 這樣的數字設定為 0;雖然您的預期輸出以某種方式顯示 1 的條目為 11。并且 0 也設定為 0,而不是 1(該字母顯示在您的預期輸出中)。
uj5u.com熱心網友回復:
您的預期輸出與您的邏輯似乎不一致。看起來 0 到 10(不包括)之間的任何值都應該是 1,而另一個應該是 0。
如果是這樣,試試這個:
df2 = pd.DataFrame(np.where((0 < df1) & (df1 < 10), 1, 0))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/427578.html
上一篇:如果pandasdf列中不存在,則嘗試向url添加前綴
下一篇:聚合后設定標題
