Группа фреймов данных с 2 столбцами и количеством событий в третьем

#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, потому что там много записей. Может быть, нужно снова сгруппировать результат?