Pandas 将 groupby 之后的值计数扩展为列

2024-03-13

作为特征工程的一部分,我想使用 groupby 之后的列计数作为模型的特征,这是我尝试过的

>>> import pandas as pd
>>> from collections import Counter
>>> df = pd.DataFrame({'col1':['a','b','a','c','a','b'],'col2':['val1','val2','val2','val1','val2','val2'],'col3':['val3','val4','val3','val4','val3','val4']})
>>> df
   col1  col2  col3
0    a  val1  val3
1    b  val2  val4
2    a  val2  val3
3    c  val1  val4
4    a  val2  val3
5    b  val2  val4
>>> test = df.groupby('col1').agg(list)
                    col2                col3
col1
a     [val1, val2, val2]  [val3, val3, val3]
b           [val2, val2]        [val4, val4]
c                 [val1]              [val4]
>>> test['col2'] = test['col2'].apply(lambda x: Counter(x))
>>> test['col3'] = test['col3'].apply(lambda x: Counter(x))
>>> test
                        col2         col3
col1
a     {'val1': 1, 'val2': 2}  {'val3': 3}
b                {'val2': 2}  {'val4': 2}
c                {'val1': 1}  {'val4': 1}

稍后我可以将字典扩展为单独的列,因此最终输出将是:

>>> final = pd.concat([test.drop(['col2'], axis=1), test['col2'].apply(pd.Series)], axis=1)
>>> final = pd.concat([final.drop(['col3'], axis=1), final['col3'].apply(pd.Series)], axis=1)
   val1 val2 val3 val4
a  1.0  2.0  3.0  NaN
b  NaN  2.0  NaN  2.0
c  1.0  NaN  NaN  1.0

我觉得有一个更简单的解决方案,感谢任何帮助。


就在这里,melt https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.melt.html+crosstab https://pandas.pydata.org/docs/reference/api/pandas.crosstab.html:

df2 = df.melt(id_vars='col1', value_name='count')
pd.crosstab(df2['col1'], df2['count'])

output:

count  val1  val2  val3  val4
col1                         
a         1     2     3     0
b         0     2     0     2
c         1     0     0     1

如果你想NaN:

df3 = pd.crosstab(df2['col1'], df2['count'])
df3.mask(df3.eq(0))

output:

count  val1  val2  val3  val4
col1                         
a       1.0   2.0   3.0   NaN
b       NaN   2.0   NaN   2.0
c       1.0   NaN   NaN   1.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 将 groupby 之后的值计数扩展为列 的相关文章

随机推荐

  • 如何在 glob() 模式中编写“或”?

    glob glob 不使用正则表达式 它使用 Unix 路径扩展规则 我如何在 glob 中模拟这个正则表达式 jpg png 很好glob你应该这样做 lst glob glob jpg glob glob png
  • SVN反向合并?

    我的 SVN 存储库在修订版 497 时非常完美 我执行了几次错误的提交 因此现在它处于修订版 HEAD 我发现要回滚 您应该使用如下命令 svn merge r HEAD 497 在工作目录中 并且工作目录位于 HEAD 修订版 但这是正
  • PHP 从字符串中获取搜索词数组

    有没有一种简单的方法来解析字符串以查找包括否定词在内的搜索词 this that the other thing but not this positive 会变成 array positive gt array this the othe
  • pytz 在 Mac 上安装

    Django 通知我 ImportError 没有名为 pytz 的模块 但是当我使用 pip 安装它时 我得到以下结果 Requirement already satisfied use upgrade to upgrade pytz i
  • MySQL通过数组中的键搜索json值

    我有一个 JSON 对象数组 想要返回一个特定的节点 为了简化我的问题 假设数组可能如下所示 Race Orc strength 14 Race Knight strength 7 例如 我想知道骑士的实力 功能JSON SEARCH ht
  • 通过函数打开流

    我需要有关不可复制性质的帮助 io f streams 我需要提供一个黑客包装fstreams 以便在 Windows 上处理文件名中包含 unicode 字符的文件 为此 我设计了一个包装函数 bool open ifstream ist
  • ImportError:在 apache 上安装 django mod_wsgi 配置中没有名为 django.core.handlers.wsgi 的模块

    我尝试安装 django 以与 apache 和 mod wsgi 一起使用 但出现此错误 ImportError No module named django core handlers wsgi 我读到这可能是用户错误 在控制台 ssh
  • 从 Redis 中删除会话 (Django)

    我使用 Django 和 Redis 作为会话引擎 也是 Celery 但那是别的东西 它运行完美 我可以看到速度的提高 SESSION ENGINE django contrib sessions backends cached db 我
  • 需要哪些 Visual C++ DLL?

    我不喜欢必须为使用 Microsoft 编译器编译的程序分发安装程序 我更喜欢使用与可执行文件打包在同一目录中的 DLL 那么 MSVC 2010 所需的 DLL 是什么 没有一个简单的答案 因为这取决于您在程序中构建的依赖项 您可能想使用
  • 在 Laravel 5 或 4.3 中包含 CSS

    TL DR 在 Laravel 5 中链接到样式表的正确方法是什么 背景 我使用 Laravel 4 3 5 的开发版本 因为我想使用 Socialite 从一开始就使用它进行开发是有意义的 我在从 4 2 传输模板时遇到问题 我已将刀片布
  • 跟踪 python:仅包含一些文件

    我知道我可以用它来跟踪命令执行 python m trace t script py 但我想减少输出 只应显示我的 src pip install e 中的文件 我怎样才能做到这一点 如果您正在运行脚本bash你可以使用类似的东西 pyth
  • 模块“tensorflow.python.keras.api._v2.keras.layers”没有属性“CuDNNLSTM”

    当我写作时tf keras layers LSTM 我收到警告 Note that this layer is not optimized for performance Please use tf keras layers CuDNNLS
  • PHP 有没有办法在 foreach 中重新启动循环,或更改 switch 中的测试值?

    如果我正在循环一个数组 并且在其中一个循环的中间我发现一些小问题 改变 一些东西 并且需要重试 有没有办法跳回到循环顶部而不从数组中获取下一个值 我怀疑这是否存在 但它会是一些关键字 例如continue or break 事实上 它很像c
  • C# 的 CSV 解析器/阅读器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 astropy.table.columns 转换为 numpy 数组

    我想绘制points points np random multivariate normal mean 0 0 cov 0 4 9 9 10 size int 1e4 print points 2 50584156 2 77190372
  • PostgreSQL 没有自增功能?

    我有一个用 Java 编写的测试应用程序 用于在 MySQL PostgreSQL Oracle 和 Firebird 数据库 除其他外 中创建索引和非索引表 难道只是 PostgreSQL 不允许自动增量功能的情况吗 如果没有 拥有索引列
  • 等待 alamofire 完成获取请求并创建对象[重复]

    这个问题在这里已经有答案了 我在等待一个对象制作完成后遇到问题 然后我希望更新我的用户界面 如果我运行该函数 它将立即出现索引错误 因为它试图从第一个对象中获取一些文本 而该对象尚不存在 任何人都可以帮助我吗 func getMovieDa
  • Android 中的身份验证

    我正在使用客户端 Android 应用程序开发基于 Django 的 Web 应用程序 在 Web 端 身份验证是借助存储在 cookie 中的会话 ID 完成的 默认的 Django 实现 但我无法弄清楚如何在 Android 客户端中对
  • React Typescript 故事书通过 onChange 回调实现自定义输入组件,然后将 State 值返回到输入

    我目前正在用故事书实现一个 React 定制输入组件 我希望实现的是这个定制的输入组件将需要几个参数 其中一个参数是onChangeInput 稍后它将负责为 输入值 设置状态值 下面是我的主要输入组件实现 输入 tsx import Re
  • Pandas 将 groupby 之后的值计数扩展为列

    作为特征工程的一部分 我想使用 groupby 之后的列计数作为模型的特征 这是我尝试过的 gt gt gt import pandas as pd gt gt gt from collections import Counter gt g