Панды: Как подсчитать значения смешанных регистров символов в разных столбцах в Python?

#python #excel #pandas #dataframe #jupyter-notebook

Вопрос:

У меня есть фрейм данных с разными столбцами

Страна СТРАНА1 СТРАНА2 л.с.
Италия Великобритания Франция 50
Великобритания Франция Италия 150

Я хотел бы посчитать страны в разных столбцах по строкам(без использования melt), чтобы получить и вывести следующее:

 Italy 2

France 2

Uk 2
 

Я пробовал разные варианты, как loc и groupby , но это не работает.

Спасибо

Комментарии:

1. Melt это и потом value_counts .

Ответ №1:

Вы можете отфильтровать COUNTRY* столбцы по .filter() , а затем .stack() по одному столбцу с названиями стран.

Поскольку в названиях ваших стран используются смешанные регистры букв, вы можете изменить названия стран на регистр заголовка (первая заглавная буква), str.title() прежде чем мы посчитаем .value_counts() случаи, следующим образом:

 df.filter(like='COUNTRY').stack().str.title().value_counts()
 

Результат:

 Italy     2
Uk        2
France    2
dtype: int64
 

Ответ №2:

предложение @Henry Yik намного эффективнее, и в сочетании с groupby может решить вашу проблему. кроме того, попробуйте это:

 def count_entries(df, col_name):
    
    country_count = {}
    
    # Extract column from DataFrame: col
    col = df[col_name]
    
    # Iterate over country column in DataFrame
    for entry in col:
        # If the country is in langs_count, add 1
        if entry in country_count.keys():
            country_count[entry] = country_count[entry]   1 
        # Else add the language to langs_count, set the value to 1
        else:
            country_count[entry] = 1

    return country_count
print(df.columns)

# Call count_entries(): result
for col_name in df.columns:
    result = count_entries(df, col_name)
    print(result)