2016-01-23 36 views
55

我有一個有兩列的熊貓數據框。我需要在不影響第二列的情況下更改第一列的值,並只更改第一列值就可以取回整個數據框。我該如何做到這一點使用適用於熊貓?熊貓:如何將單個列的apply()函數使用?

+3

請張貼一些輸入採樣數據和期望的輸出。 –

+0

在這種情況下,你幾乎不應該使用'apply'。直接在列上操作。 –

回答

107

給定的樣本數據幀df爲:

a,b 
1,2 
2,3 
3,4 
4,5 

你想要的是:

df['a'] = df['a'].apply(lambda x: x + 1) 

返回:

a b 
0 2 2 
1 3 3 
2 4 4 
3 5 5 
+0

'應用程序'應該永遠不會在這種情況下使用 –

+1

@TedPetrou你是完全正確的,這只是一個例子,就像OP所要求的那樣,如何在單個列上應用一個通用函數。 –

7

對於一列更好地使用map(),像這個:

df = pd.DataFrame([{'a': 15, 'b': 15, 'c': 5}, {'a': 20, 'b': 10, 'c': 7}, {'a': 25, 'b': 30, 'c': 9}]) 

    a b c 
0 15 15 5 
1 20 10 7 
2 25 30 9 



df['a'] = df['a'].map(lambda a: a/2.) 

     a b c 
0 7.5 15 5 
1 10.0 10 7 
2 12.5 30 9 
+24

爲什麼'map()'比'apply()'更適合單列? – ChaimG

+2

我認爲它應該是'lambda a:a/2'。 –

17

根本不需要函數。您可以直接在整列上工作。

實施例的數據:

>>> df = pd.DataFrame({'a': [100, 1000], 'b': [200, 2000], 'c': [300, 3000]}) 
>>> df 

     a  b  c 
0 100 200 300 
1 1000 2000 3000 

一半所有在a列值:

>>> df.a = df.a/2 
>>> df 

    a  b  c 
0 50 200 300 
1 500 2000 3000 
相關問題