Python 列切片的值计数,以包含列中所有可能的唯一值

Python 列切片的值计数,以包含列中所有可能的唯一值,python,pandas,Python,Pandas,我有一个df,看起来像这样: group val A 1 A 1 A 2 B 1 B 2 B 3 > df[df['group']=='A']['val'].value_counts() 1 2 2 1 Name: val, dtype: int64 我希望分别获取每个组的值\u计数,但希望显示每个值\u计数组的所有可能值: > df[df['group']=='A']['val

我有一个df,看起来像这样:

group   val
A       1
A       1
A       2
B       1
B       2
B       3
> df[df['group']=='A']['val'].value_counts()

1       2
2       1
Name: val, dtype: int64
我希望分别获取每个组的值\u计数,但希望显示每个值\u计数组的所有可能值:

> df[df['group']=='A']['val'].value_counts()

1       2
2       1
3       NaN
Name: val, dtype: int64
但现在看起来是这样的:

group   val
A       1
A       1
A       2
B       1
B       2
B       3
> df[df['group']=='A']['val'].value_counts()

1       2
2       1
Name: val, dtype: int64
任何人都知道我可以用所有可能的值来显示值计数的方法吗?

这是有效的:

from io import StringIO
import pandas as pd
import numpy as np

data = StringIO("""group,val
A,1
A,1
A,2
B,1
B,2
B,3""")
df = pd.read_csv(data)

print(df, '\n')

res_idx = pd.MultiIndex.from_product([df['group'].unique(), df['val'].unique()])
res = pd.concat([pd.DataFrame(index=res_idx),
                 df.groupby('group').apply(lambda x: x['val'].value_counts())],
                axis=1)

print(res)
产生:

  group  val
0     A    1
1     A    1
2     A    2
3     B    1
4     B    2
5     B    3 

     val
A 1  2.0
  2  1.0
  3  NaN
B 1  1.0
  2  1.0
  3  1.0
这项工作:

from io import StringIO
import pandas as pd
import numpy as np

data = StringIO("""group,val
A,1
A,1
A,2
B,1
B,2
B,3""")
df = pd.read_csv(data)

print(df, '\n')

res_idx = pd.MultiIndex.from_product([df['group'].unique(), df['val'].unique()])
res = pd.concat([pd.DataFrame(index=res_idx),
                 df.groupby('group').apply(lambda x: x['val'].value_counts())],
                axis=1)

print(res)
产生:

  group  val
0     A    1
1     A    1
2     A    2
3     B    1
4     B    2
5     B    3 

     val
A 1  2.0
  2  1.0
  3  NaN
B 1  1.0
  2  1.0
  3  1.0

df.groupby(df.index).value\u counts()
对您不起作用?谢谢--我可能没有正确实现,但我收到了这个错误:“DataFrameGroupBy”对象没有属性“value\u counts”如何:
df.groupby(df.index).apply(lambda x:x['val'].value\u counts())
?不幸的是,没有。这给了我完整的'val'列和第二列中的1列表。
df.groupby(df.index).value\u counts()
不适用于您?谢谢--我可能没有正确实现,但我收到了这个错误:'DataFrameGroupBy'对象没有属性'value\u counts',关于:
df.groupby(df.index).应用(lambda x:x['val'].value_counts())
?不幸的是,没有。这给了我完整的'val'列和第二列中的1的列表。谢谢你的帮助。Ubuntu的一行代码似乎很简单!Unutbu,不是Ubuntu。此人不是操作系统!:)很高兴你找到了你想要的东西。谢谢你的帮助。Ubuntu的一行程序似乎非常直接!Unutbu,不是Ubuntu。此人不是操作系统!:)很高兴你找到了你要找的东西。