我对 Python 上的装饰器和类一般都很陌生,但是有一个问题,是否有更好的方法来装饰 pandas 对象。举个例子,我编写了以下代码来创建两个方法——lisa 和 wil:
import numpy as np
import pandas as pd
test = np.array([['john', 'meg', 2.23, 6.49],
['lisa', 'wil', 9.67, 8.87],
['lisa', 'fay', 3.41, 5.04],
['lisa', 'wil', 0.58, 6.12],
['john', 'wil', 7.31, 1.74]],
)
test = pd.DataFrame(test)
test.columns = ['name1','name2','scoreA','scoreB']
@pd.api.extensions.register_dataframe_accessor('abc')
class ABCDataFrame:
def __init__(self, pandas_obj):
self._obj = pandas_obj
@property
def lisa(self):
return self._obj.loc[self._obj['name1'] == 'lisa']
@property
def wil(self):
return self._obj.loc[self._obj['name2'] == 'wil']
示例输出如下:
test.abc.lisa.abc.wil
name1 name2 scoreA scoreB
1 lisa wil 9.67 8.87
3 lisa wil 0.58 6.12
我有两个问题。
首先,在实践中,我创建的方法远不止两种,并且需要在同一行中调用其中的许多方法。有没有办法test.lisa.wil
返回与上面我写的相同的输出test.abc.lisa.abc.wil
,因为前者可以让我不必abc
每次都输入?
其次,如果有任何其他关于装饰 pandas DataFrames 的建议/资源,请告诉我。