Вам нужно transform
size
- len
of df
такое же, как и раньше:
import pandas as pd
df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']
, 'B': ['a', 'c', 'c','b','b']})
print (df)
A B
0 x a
1 x c
2 x c
3 y b
4 y b
df['size'] = df.groupby(['A', 'B'])['A'].transform('size')
print (df)
A B size
0 x a 1
1 x c 2
2 x c 2
3 y b 2
4 y b 2
При необходимости имя столбца в агрегации df
- len
of df
, очевидно, НЕ такое же, как и раньше:
import pandas as pd
df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']
, 'B': ['a', 'c', 'c','b','b']})
print (df)
A B
0 x a
1 x c
2 x c
3 y b
4 y b
df = df.groupby(['A', 'B']).size().reset_index(name='Size')
print (df)
A B Size
0 x a 1
1 x c 2
2 y b 2
Вероятно, есть nan
значения в кадре данных, nan
имеет тип float и вызывает ошибку:
from fuzzywuzzy import process, fuzz
import pandas as pd
import numpy as np
df_nan = pd.DataFrame({'text1': ["quick", "brown", "fox"], "text2": ["hello", np.NaN, "world"]})
df_nan
Out:
text1 text2
0 quick hello
1 brown NaN
2 fox world
Просто пример кода, который вызывает ту же ошибку:
[ 111] Replcace nan
с некоторым токеном (выбрать правильный токен будет трудной и зависящей от данных задачей, вероятно, пустая строка - плохой выбор):
df = df_nan.fillna('##SOME_TOKEN##')
[process.extract(i, df['text1'], limit=3) for i in df['text2']]
Out:
[[('fox', 36, 2), ('brown', 20, 1), ('quick', 0, 0)],
[('brown', 36, 1), ('fox', 30, 2), ('quick', 18, 0)],
[('fox', 30, 2), ('brown', 20, 1), ('quick', 0, 0)]]
Я предполагаю заменить или отбросить все не строковые значения помогут.