2017-03-05 106 views
1

我有一個熊貓數據幀,如下所示...熊貓數據幀:有條件選擇列

C1 C2 C3  C4 
0 -1 -3 3 0.75 
1 10 20 30 -0.50 

欲其具有值在每行中僅添加前兩列小於零。例如,該系列我會得到上面的情況是如下......

CR 
0 -4 
1 0 

我知道如何運用其他功能,如下面的...

df.iloc[:, :-2].abs().sum(axis = 1) 

是否有辦法使用lambda函數?

回答

2

看來你需要通過ilocwheresum選擇:

df = df.iloc[:,:2].where(df < 0).sum(axis=1) 
print (df) 
0 -4.0 
1 0.0 
dtype: float64 

如果有selection by callable需要的解決方案:

df = df.iloc[:, lambda df: [0,1]].where(df < 0).sum(axis=1) 
print (df) 
0 -4.0 
1 0.0 
dtype: float64 

對於lambda功能python太適用於此。

在大熊貓拉姆達:按行.apply(axis=0)

#sample data 
np.random.seed(100) 
df = pd.DataFrame(np.random.randint(10, size=(5,5)), columns=list('ABCDE')) 
print (df) 
    A B C D E 
0 8 8 3 7 7 
1 0 4 2 5 2 
2 2 2 1 0 8 
3 4 0 9 6 2 
4 4 1 5 3 4 

獲取區別是什麼默認設置,以便同.apply()

#instead function f1 is possible use lambda, if function is simple 
print (df.apply(lambda x: x.max() - x.min())) 
A 8 
B 8 
C 8 
D 7 
E 6 
dtype: int64 

def f1(x): 
    #print (x) 
    return x.max() - x.min() 

print (df.apply(f1)) 
A 8 
B 8 
C 8 
D 7 
E 6 
dtype: int64 

找列.apply(axis=1)

#instead function f2 is possible use lambda, if function is simple 
print (df.apply(lambda x: x.max() - x.min(), axis=1)) 
0 5 
1 5 
2 8 
3 9 
4 4 
dtype: int64 

def f2(x): 
    #print (x) 
    return x.max() - x.min() 

print (df.apply(f2, axis=1)) 
0 5 
1 5 
2 8 
3 9 
4 4 
dtype: int64 
+0

的。凡差異條款是我需要的。我不明白lambda語法 - 你能指點我一些好的資源嗎?謝謝。 – bincob

+0

lambda在熊貓 - 我找不到一些不錯的資源。 :( – jezrael

+1

我嘗試用lambda函數添加一些示例,我希望它有幫助。 – jezrael