#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)