#python #pandas #dataframe #group-by
Вопрос:
Я пытаюсь сгруппировать фрейм данных по двум столбцам и подсчитать разницу в третьем столбце. Что у меня есть до сих пор, так это:
import pandas as pd df = pd.DataFrame({'colA': ['name1', 'name2', 'name2', 'name4', 'name2', 'name5'], 'colB': ['red', 'yellow', 'yellow', 'black', 'yellow', 'green'], 'colC': ['value1', 'vlaue2', 'value2', 'value4', 'value5', 'value6']}) df_grouped = df.groupby(["colA", "colB"])["colC"].count() print(df_grouped)
Где вывод:
colA colB name1 red 1 name2 yellow 3 name4 black 1 name5 green 1
Что я пытаюсь сделать, так это увидеть colA и ColB как 1 колум и подсчитать (и показать) наличие разных значений в ColC. Так что в данном случае это должно быть:
colA colB colC count 0 name1 red value1 1 1 name2 yellow vlaue2 2 2 value5 1 3 name4 black value4 1 4 name5 green value6 1
Заранее спасибо.
Редактировать: То, что я также пробовал, это:
df["colAB"] = df["colA"].map(str) " " df["colB"] df_grouped = df.groupby(["colAB", "colC"])["colC"].count().reset_index(name="count")
Но это также не принесло нужного результата. Чтобы быть более конкретным. Что мне нужно, так это каждое значение (ColC) и число, как часто оно встречается для комбинации colA и ColB. Даже если есть 2 столбца для colA и ColB, комбинация этих двух значений представляет собой одно отдельное значение.
Ответ №1:
Если я правильно понимаю,вам просто нужно сгруппироваться по 3 столбцам A, B и C:
df_grouped = df.groupby(["colA", "colB","colC"])["colC"].count().reset_index(name="count")
Output : gt; colA colB colC count 0 name1 red value1 1 1 name2 yellow value2 2 2 name2 yellow value5 1 3 name4 black value4 1 4 name5 green value6 1
df_grouped = df.groupby(["colA", "colB","colC"])["colC"].count() gt; colA colB colC name1 red value1 1 name2 yellow value2 2 value5 1 name4 black value4 1 name5 green value6 1
Комментарии:
1. Спасибо за ваш ответ. Это может сработать. Но что было бы лучше, если бы комбинация colA и ColB появлялась только один раз и могла быть сгруппирована вместе, а затем отображались только разные COLC. В этом случае проиндексируйте 1 и 2, потому что там много записей. Может быть, нужно снова сгруппировать результат?