Я хотел бы проанализировать и преобразовать следующий DataFrame
import random
import string
import numpy as np
import pandas as pd
# generate example dataframe
df=pd.DataFrame()
df['Name']=[str(x) for x in np.random.choice(['a','b','c'],10)]
df['Cat1']=[str(x) for x in np.random.choice(['x',''],10)]
df['Cat2']=[str(x) for x in np.random.choice(['x',''],10)]
df['Cat3']=[str(x) for x in np.random.choice(['x',''],10)]
df.head(10)
Это создает DataFrame следующим образом:
Пример DataFrame
задача состоит в том, чтобы посчитать 'x' в столбцах Cat1, Cat2, Cat3 для каждой уникальной записи в столбце 'Name'.Это может быть достигнуто с помощью функции groupby ():
grouped=df.groupby(['Name'])
dfg=grouped['Cat1','Cat2','Cat3'].sum()
dfg
Результат анализа
И результат - это почти то, что я хотел.Теперь мне нужно было заменить «x» на число, например, «xxxx» на 4, «x» на 1 и так далее.В решении используется цикл по всем столбцам:
for col in range(0,len(dfg.columns)):
dfg[dfg.columns[col]]=list(map(lambda x: len(x), dfg[dfg.columns[col]]))
dfg
Конечный результат.
Теперь мне интересно, как мне избежать этого цикла и достичь того же конечного результата?
Большое спасибо за то, что поделились своими идеями и рекомендациями.