Pandas groupby 多列独占

Pandas groupby multiple columns exclusively

我有下面的 DataFrame,想找到每列的 yn 的计数:

ID var1 var2
1 y
2 n y
3 y n
4 y n
5 y

结果是这样的:

var1_N var2_N
y 3 2
n 1 2

我使用了 transform 函数,但想知道是否有更好的方法来获取结果。 谢谢!

您可以使用 apply 方法对所有需要计数的列执行 value_counts,结果将自动加入索引(或您的情况下的 var 值):

df.filter(like='var').apply(lambda s: s.value_counts())

   var1  var2
y     3     2
n     1     2

或直接使用pd.value_counts

df.filter(like='var').apply(pd.value_counts)

   var1  var2
y     3     2
n     1     2

您可以使用 melt 来展平数据框,然后使用 value_countsunstack 变量列:

>>> df.melt('ID').value_counts(['variable', 'value']).unstack('variable')

variable  var1  var2
value               
n            1     2
y            3     2

您可以删除索引和列名:通过附加``

输出:

>>> df.melt('ID').value_counts(['variable', 'value']).unstack('variable') \
      .rename_axis(index=None, columns=None)

   var1  var2
n     1     2
y     3     2