Создать DataFrame,
x_df = pd.DataFrame({'a': [1,2,3,4,5,6], 'b': [1,2,1,2,1,2],
'c': ['x','x','y','y','z','z']})
Out[56]:
a b c
0 1 1 x
1 2 2 x
2 3 1 y
3 4 2 y
4 5 1 z
5 6 2 z
Теперь я хочу использовать функцию для каждого значения столбца 'c'.Поэтому я использую функцию apply()
для результата groupby
.
x_df = pd.DataFrame({'a': [1,2,3,4,5,6], 'b': [1,2,1,2,1,2], 'c': ['x','x','y','y','z','z']})
def fun(X):
print("===============>>>>>>>>>>>>>>>>>>>>> ")
print(list(X))
print("\n")
c_str = X.c.tolist[0]
print("Value of c_str ==========>>> "+ str(c_str))
return y
x_df1 = x_df.groupby('c').apply(fun).reset_index()
Выполнение кода выше дает следующий результат:
---------------------------------------------------------------
===============>>>>>>>>>>>>>>>>>>>>>
['a', 'b', 'c']
===============>>>>>>>>>>>>>>>>>>>>>
['a', 'b', 'c']
===============>>>>>>>>>>>>>>>>>>>>>
**['a', 'b']**
===============>>>>>>>>>>>>>>>>>>>>>
**['a', 'b']**
Traceback (most recent call last):
File "<ipython-input-20-6870c2554589>", line 12, in <module>
x_df1 = x_df.groupby('c').apply(fun).reset_index()
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\groupby\groupby.py", line 930, in apply
return self._python_apply_general(f)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\groupby\groupby.py", line 936, in _python_apply_general
self.axis)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\groupby\groupby.py", line 2273, in apply
res = f(group)
File "<ipython-input-20-6870c2554589>", line 6, in fun
c_str = X.c.tolist[0]
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 4376, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'c'
Итак, вПервые два вызова функции fun X имеют все три столбца (что и должно быть), но в 3-м и 4-м столбцах вызовов c
отсутствует.из-за которого я не могу получить к нему доступ.Может кто-нибудь подсказать мне, что я делаю неправильно и почему столбец c
отсутствует на 3-м и 4-м вызовах?