pandas - 如何在 Python 中将某些列值组合在一起并使另一列中的值成为组合值的手段?
问题描述
我有一个 Panda 数据框,其中一列是数字序列(“序列”),其中许多是重复的,而其他列值(“二进制变量”)是 1 或 0。
我已按序列列中相同的值进行分组,并使二进制变量中的列值成为该组中非零条目的百分比。
我现在想将“序列”列中的条目与相同的值组合在一起,并使“二进制变量”中的列值成为被组合的那些列的列值的平均值。
所以我的数据框看起来像这样:
df = pd.DataFrame([{'sequence' : [1, 1, 4,4,4 ,6], '二进制变量' : [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
推荐阅读
- php - 如何在不删除键且不重置键的情况下删除数组的空值
- android - Android:添加新的 buildType - 找不到项目的匹配配置
- database - 宠物店如何设计数据库实体关系图?
- c# - Json.net 中 JObject.SelectTokens 中的 Json 路径查询不返回结果
- c++ - CMake没有目录路径的文件的全局列表
- javascript - Angular [innerHtml]:如何使用 [innerHtml] 指令在元素内渲染其他元素
- c# - 如何正确提供静态 xml 资源并绑定组合框?
- docker - Hashicorp Vault 单节点
- jsp - 如何在 JSP 中使用不同名称的 for 循环创建 5 个文本框?
- testing - 不同类别的不同测试(Nora ui)