Pandas 如何在Python中将某些列值组合在一起,并使另一列中的值成为组合值的手段?

Pandas 如何在Python中将某些列值组合在一起,并使另一列中的值成为组合值的手段?,pandas,dataframe,pandas-groupby,Pandas,Dataframe,Pandas Groupby,我有一个Panda数据框,其中一列是数字序列(“序列”),其中许多是重复的,其他列值(“二进制变量”)是1或0 我按照序列列中相同的值进行分组,并将二进制变量中的列值设置为该组中非零项的百分比 现在,我想将“sequence”列中的条目与相同的值组合在一起,并使“binary variable”中的列值成为这些组合列的列值的平均值 因此,我的数据框如下所示: df=pd.DataFrame([{'sequence':[1,1,4,4,4,6],'binary variable':[1,0,0,1

我有一个Panda数据框,其中一列是数字序列(“序列”),其中许多是重复的,其他列值(“二进制变量”)是1或0

我按照序列列中相同的值进行分组,并将二进制变量中的列值设置为该组中非零项的百分比

现在,我想将“sequence”列中的条目与相同的值组合在一起,并使“binary variable”中的列值成为这些组合列的列值的平均值

因此,我的数据框如下所示:

df=pd.DataFrame([{'sequence':[1,1,4,4,4,6],'binary variable':[1,0,0,1,0,1]})

然后,我使用此代码按顺序将相同的值分组。使用此代码: df.groupby([“sequence”]).apply(lambda'binary variable':(binary variable!=0).sum()/binary variable.count()*100)

剩下的序列列具有非重复值,二进制变量列现在是非零的百分比

但是现在我想把一些列的值组合在一起(在这个玩具示例中是1和4的值),让二进制变量列的值是1和4的值的百分比的平均值

这不是非常好的措辞,因为我觉得很难描述它,但任何帮助都将非常感谢,我曾尝试在线查看,并尝试使用我自己的代码多次失败,但它就是不起作用


任何帮助都将不胜感激

您似乎希望对表进行两次分组并每次取平均值。对于第二次分组,您需要创建一个新列来指示该组

请尝试以下代码:

import pandas as pd

# sequence groups for final average
grps = {(1,4):[1,4],
        (5,6):[5,6]}

# initial data
df = pd.DataFrame({'sequence' : [1,1,4,4,4,5,5,6], 'binvar' : [1,0,0,1,0,1,0,1]})

gb = df.groupby(["sequence"])['binvar'].mean().reset_index()  #.apply(lambda 'binary variable': (binary variable!= 0).sum() / binary variable.count()*100 )

def getgrp(x):  # search groups
   for k in grps:
      if x in grps[k]:
         return k

print(df.to_string(index=False))
gb['group'] = gb.apply(lambda r: getgrp(r[0]), axis = 1)

gb = gb.reset_index()
print(gb.to_string(index=False))

gb = gb[['group','binvar']].groupby("group")['binvar'].mean().reset_index()

print(gb.to_string(index=False))
输出

 sequence  binvar
        1       1
        1       0
        4       0
        4       1
        4       0
        5       1
        5       0
        6       1

 index  sequence    binvar   group
     0         1  0.500000  (1, 4)
     1         4  0.333333  (1, 4)
     2         5  0.500000  (5, 6)
     3         6  1.000000  (5, 6)

  group    binvar
 (1, 4)  0.416667
 (5, 6)  0.750000