![](/img/trans.png)
[英]How to apply different functions to different columns on pandas dataframe
[英]Pandas: apply different functions to different columns
當使用df.mean()
我得到一個結果,其中給出了每列的平均值。 現在讓我們說我想要第一列的平均值,以及第二列的總和。 有沒有辦法做到這一點? 我不想拆卸和重新組裝DataFrame
。
我最初的想法是按照pandas.groupby.agg()
方式做一些事情:
df = pd.DataFrame(np.random.random((10,2)), columns=['A','B'])
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
Traceback (most recent call last):
File "<ipython-input-81-265d3e797682>", line 1, in <module>
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3471, in apply
return self._apply_standard(f, axis, reduce=reduce)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3560, in _apply_standard
results[i] = func(v)
TypeError: ("'dict' object is not callable", u'occurred at index A')
但顯然這不起作用。 看起來傳遞dict是一種直觀的方式,但還有另一種方式(同樣沒有拆卸和重新組裝DataFrame
)?
你可以試試一個閉包:
def multi_func(functions):
def f(col):
return functions[col.name](col)
return f
df = pd.DataFrame(np.random.random((10, 2)), columns=['A', 'B'])
result = df.apply(multi_func({'A': np.mean, 'B': np.sum}))
我認為你可以使用agg
方法和字典作為參數。 例如:
df = pd.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5]})
df =
A B
0 0 3
1 1 4
2 2 5
df.agg({'A': 'mean', 'B': sum})
A 1.0
B 12.0
dtype: float64
我自己剛剛面對這種情況並提出以下建議:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame([['one', 'two'], ['three', 'four'], ['five', 'six']],
...: columns=['A', 'B'])
In [3]: df
Out[3]:
A B
0 one two
1 three four
2 five six
In [4]: converters = {'A': lambda x: x[:1], 'B': lambda x: x.replace('o', '')}
In [5]: new = pd.DataFrame.from_dict({col: series.apply(converters[col])
...: if col in converters else series
...: for col, series in df.iteritems()})
In [6]: new
Out[6]:
A B
0 o tw
1 t fur
2 f six
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.