熊猫执行多种转换并创建新的数据框

问题描述 投票:0回答:2

我有一个daframe,我要在其中执行多个(独立的)转换,并且它们创建一个新的数据框(具有多索引),其中每个索引对应于其中一个转换。

更具体地说:

df = pd.DataFrame([[1, "X", 'H', 100], [2, "Y", 'K', 100] ,[3, "X", 'H', 200], [4, "Y", 'H', 100]], columns=['id', 'XY', 'HK', 'A']).set_index("id")


    XY  HK  A
id          
1   X   H   100
2   Y   K   100
3   X   H   200
4   Y   H   100

我现在想知道多少个XY和多少个HK具有相同的A。最终结果应如下所示(具有多索引):

     XY      HK
    X   Y   H   K   
A       
100 1.0 2.0 2.0 1.0
200 1.0 NaN 1.0 NaN

这是我期望的工作:

df.groupby(['A', 'XY', 'HK']).count()

但它仅包含不带值的多重索引。

我能做的是:

  1. 计算XY

    xy_count = df.groupby(['A', 'XY']).count().HK.unstack()
    
  2. 计算HK

    hk_count = df.groupby(['A', 'HK']).count().XY.unstack()
    
  3. 合并结果(?)

    results = pd.DataFrame()
    results['XY'] = xy_count
    results['HK'] = hk_count 
    

但是最后一部分现在可以使用。

所以我的问题是:

Q1:我似乎缺少更好的方法Q2:为什么第3步不起作用?

不是一个真正的问题,但我也感到困惑,要获得HK,您必须致电XY列,反之亦然。

python pandas pandas-groupby multi-index
2个回答
1
投票

您可以做:

groups = df.groupby('A')
pd.concat({col:groups[col].value_counts().unstack() 
           for col in ['XY','HK']}, axis=1)

输出:

      XY        HK     
       X    Y    H    K
A                      
100  1.0  2.0  2.0  1.0
200  1.0  NaN  1.0  NaN

1
投票

我将首先进行melt

s=df.melt('A').groupby(['A','variable']).value.value_counts().unstack([1,2])
variable   HK        XY     
value       H    K    Y    X
A                           
100       2.0  1.0  2.0  1.0
200       1.0  NaN  NaN  1.0
© www.soinside.com 2019 - 2024. All rights reserved.