Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法在pandas中执行groupby,以便在行和列中使用相同的功能?_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python 有没有办法在pandas中执行groupby,以便在行和列中使用相同的功能?

Python 有没有办法在pandas中执行groupby,以便在行和列中使用相同的功能?,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,输入表: person cat1 cat2 P1 A X P1 B X P2 A X P2 B Y P3 A X P3 B Y 所需表格: B X Y Z X 1 2 0 A Y 0 0 0 Z 0 0 0

输入表:

person    cat1    cat2
   P1        A    X
   P1        B    X
   P2        A    X
   P2        B    Y
   P3        A    X
   P3        B    Y
所需表格:

             B
        X    Y    Z
     X  1    2    0
A    Y  0    0    0
     Z  0    0    0
聚合函数可以是唯一的persons-
nunique()

迄今为止的代码:
df.groupby(['cat1','cat2']).person.nunique().unstack()


但这并没有给出正确的表格。关于如何做到这一点有什么帮助吗?

这相当难看,但似乎可以做到:

df1 = df.groupby('person').apply(lambda g: 
    g.pivot_table('cat2', None, 'cat1', aggfunc=lambda x: x)
)
df2 = df1.reset_index().drop('level_1', axis=1)
df3 = df2.pivot_table(None, 'A', 'B', aggfunc=lambda x: len(x))
现在确定它在“大数据”(TM)上的效率

本质上,
df1
包含的列数与
cat1
的列数相同,并用
cat2
中的值填充:

cat1         A  B
person           
p1     cat2  X  X
p2     cat2  X  Y
p3     cat2  X  Y
df2
与杂波消除时相同:

cat1 person  A  B
0        p1  X  X
1        p2  X  Y
2        p3  X  Y
并且
df3
包含以下结果:

  person   
B      X  Y
A          
X      1  2

为什么它假设A,X的计数等于B,Y(也许这就是为什么它不能以一种明显的方式进行)?P2和P3本质上是相同的行,具有不同的人号。他的操作在数学上叫什么?不起作用<代码>传递值的形状是(2,1),索引意味着(1,1)@在您的问题中,
person
是数据帧中的索引还是列?它是数据帧中的列dataframe@Mysterious但它适用于您的示例,
df=pd.DataFrame({'person':['p1','p1','p2','p2','p3','p3'],'cat1':['A','B','B','A','B'],'cat2':['X','X','X','Y','X','Y']})