Am尝试从pandas数据框中提取按ID拆分的值。但是,当我输入apply groupby时,它不会让我提供轴参数来按行应用功能
raw_data = {"id":{"0":"mergedshape_route_0009","1":"mergedshape_route_0009","2":"mergedshape_route_0009","3":"mergedshape_route_0009","4":"mergedshape_route_0009","5":"mergedshape_route_0009","6":"mergedshape_route_0009","7":"mergedshape_route_0009","8":"mergedshape_route_0009","9":"mergedshape_route_0009"},"shape_pt_lat":{"0":-6.8196991355,"1":-6.8194035167,"2":-6.8192916609,"3":-6.8192597021,"4":-6.8193262829,"5":-6.819395527,"6":-6.8194451,"7":-6.8192582,"8":-6.8184049,"9":-6.8177623},"shape_pt_lon":{"0":39.2987716198,"1":39.2989432812,"2":39.299055934,"3":39.29918468,"4":39.2993053794,"5":39.2993938923,"6":39.2994472,"7":39.2995691,"8":39.2999065,"9":39.2986298},"shape_pt_sequence":{"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9},"shape_dist_traveled":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0}}
df = pd.DataFrame(raw_data).groupby("id").apply(lambda row: row.shape_pt_lat, axis = 1)
我收到此错误
TypeError Traceback (most recent call last)
~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, func, *args, **kwargs)
917 try:
--> 918 result = self._python_apply_general(f)
919 except Exception:
~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in _python_apply_general(self, f)
935 keys, values, mutated = self.grouper.apply(f, self._selected_obj,
--> 936 self.axis)
937
~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, f, data, axis)
2272 group_axes = _get_axes(group)
-> 2273 res = f(group)
2274 if not _is_indexed_like(res, group_axes):
~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in f(g)
907 with np.errstate(all='ignore'):
--> 908 return func(g, *args, **kwargs)
909 else:
TypeError: <lambda>() got an unexpected keyword argument 'axis'
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
<ipython-input-323-9499f329157a> in <module>()
----> 1 df = pd.DataFrame(raw_data).groupby("id").apply(lambda row: row.shape_pt_lat, axis = 1)
~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, func, *args, **kwargs)
928
929 with _group_selection_context(self):
--> 930 return self._python_apply_general(f)
931
932 return result
~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in _python_apply_general(self, f)
934 def _python_apply_general(self, f):
935 keys, values, mutated = self.grouper.apply(f, self._selected_obj,
--> 936 self.axis)
937
938 return self._wrap_applied_output(
~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, f, data, axis)
2271 # group might be modified
2272 group_axes = _get_axes(group)
-> 2273 res = f(group)
2274 if not _is_indexed_like(res, group_axes):
2275 mutated = True
~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in f(g)
906 def f(g):
907 with np.errstate(all='ignore'):
--> 908 return func(g, *args, **kwargs)
909 else:
910 raise ValueError('func must be a callable if args or '
TypeError: <lambda>() got an unexpected keyword argument 'axis'
如果我按ID拆分数据帧并将其存储在列表中,然后循环遍历每个数据帧以提取值,那么我就可以开始工作,但是我想要一种直接使用groupby并应用的方法吗?
这里的任何指导将不胜感激?
谢谢!
答案 0 :(得分:1)
我有一个类似的错误。我发现GroupBy
对象的apply函数的行为与Pandas DataFrame
的apply函数不同。可以在here中找到有关GroupBy对象的apply函数的更多信息。
您在apply
函数中提供的函数应以dataframe
作为参数。它还返回dataframe
。因此,该函数修改了dataframe
,而您提供的函数则修改了一行。
它给出错误<lambda>() got an unexpected keyword argument 'axis'
,因为这里的apply函数仅接受修改数据帧和馈入函数的args kwargs的函数。
它将尝试将lambda函数的轴参数(它认为是该函数的参数)提供给您的lambda函数,并且由于您的lambda函数不需要此参数,因此会显示此错误。
您最终的解决方案是将lambda函数更改为如上所述的正确函数。