#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Работа с фреймом данных pandas и попытка перевернуть его в сгруппированном выводе, который принимает уникальные значения и помещает их в виде столбца, и соответствующие значения для каждого в качестве значений в новом фрейме данных.
Вот начальный фрейм данных:
df = pd.DataFrame([('gold', 'bronze', 'silver'),
('silver', 'gold', 'bronze'),
('gold', 'silver', 'bronze'),
('bronze', 'silver', 'gold')],
columns=('Canada', 'China', 'South Korea'))
df.head()
Canada China South Korea
0 gold bronze silver
1 silver gold bronze
2 gold silver bronze
3 bronze silver gold
Желаемый результат будет выглядеть следующим образом:
nation gold silver bronze
0 Canada 2 1 1
1 China 1 2 1
2 South Korea 1 1 2
Ответ №1:
Вы можете использовать df.apply
с pd.value_counts
*
df.apply(pd.value_counts).T
bronze gold silver
Canada 1 2 1
China 1 1 2
South Korea 2 1 1
* Я не нашел документации pd.value_counts
, так что ссылка на github связана с функцией.
РЕДАКТИРОВАТЬ: при чтении исходного кода pd.Series.value_counts
просто вызывает pd.value_counts
Ответ №2:
Используйте pd.get_dummies
и sum
pd.get_dummies(df.T, prefix='',prefix_sep='').sum(level=0,axis=1)
Out[995]:
bronze gold silver
Canada 1 2 1
China 1 1 2
South Korea 2 1 1
Ответ №3:
w = df.melt()
variable value
0 Canada gold
1 Canada silver
2 Canada gold
3 Canada bronze
4 China bronze
5 China gold
6 China silver
7 China silver
8 South Korea silver
9 South Korea bronze
10 South Korea bronze
11 South Korea gold
и затем:
pd.crosstab(w['variable'],w['value'])
желаемый результат:
value bronze gold silver
variable
Canada 1 2 1
China 1 1 2
South Korea 2 1 1
Ответ №4:
df = pd.DataFrame([('gold', 'bronze', 'silver'),
('silver', 'gold', 'bronze'),
('gold', 'silver', 'bronze'),
('bronze', 'silver', 'gold')],
columns=('Canada', 'China', 'South Korea')).transpose()
df.apply(pd.value_counts,axis=1)
Комментарии:
1. Небольшое объяснение того, как работает этот код, моя помощь