#python #pandas #dataframe #pandas-groupby
#питон #панды #фрейм данных #панды-групповые
Вопрос:
Учитывая этот фрейм данных,
import pandas as pd d = {'a': ['john', 'mary','john','john','mary','john'], 'b': [1,2,3,1,1,2], 'c': [0.7, 0.3,0.9,0.4,1.0,0.2],'d': [1,0,0,1,0,1]} df = pd.DataFrame(data=d)
Следующая строка выводит, сколько раз df['a']=john
и df['a']=mary
соответствует df['b']=1,2,3
print(df.groupby('a')['b'].value_counts())
Что я хочу сделать сейчас, так это распечатать, сколько раз df['a']=john
и df['a']=mary
соответствует df['d']=1
или =0
когда df['b']=1,2,3
. например, когда df['a']=john
и df['b']=1
, df['d']
всегда равно 1, а когда df['a']=john
и df['b']=3
и df['d']=0
т. Д…
В следующей строке выводятся все нули, и я не уверен, почему:
print((df['d'])[(df.groupby('a')['b'].value_counts())])
Комментарии:
1.
df.groupby('a')['b'].value_counts()
возвращает ряд, содержащий только 2 и 1.df['d'][2]
иdf['d'][1]
оба равны 0. Отсюда и все нули.2.
df.groupby(['a','b','c']).size()
Ответ №1:
Вы можете изменить свой код, чтобы разместить несколько столбцов в groupby
:
print(df.groupby(['a', 'b'])['d'].value_counts()) # a b d # john 1 1 2 # 2 1 1 # 3 0 1 # mary 1 0 1 # 2 0 1
Ответ №2:
Просто сделай value_counts
out = df.value_counts(['a','b','d']) a b d john 1 1 2 2 1 1 3 0 1 mary 1 0 1 2 0 1 dtype: int64