Pandas groupby 多列独占
Pandas groupby multiple columns exclusively
我有下面的 DataFrame,想找到每列的 y
和 n
的计数:
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_counts
和 unstack
变量列:
>>> 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
我有下面的 DataFrame,想找到每列的 y
和 n
的计数:
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_counts
和 unstack
变量列:
>>> 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