python - 在单个熊猫数据框中连接具有相同列值的行
问题描述
我有一个像这样的熊猫数据框:
id code mean count
1 A 32 22
1 B 9 56
1 C 25 78
2 A 33 35
2 B 11 66
基本上,对于每个 ID,可能有 N 个条目,并且每个 ID 的 N 不同,对于某些可能是 1,对于某些可能是 3 或更多。我想连接所有具有相同 ID 的行。我知道某些 ID 的某些列最终会为空,因为与其他 ID 的 N 相比,它们的“N”会更低,所以我想为这些空列填写 -1
最终数据框将如下所示:
id code1 mean1 count1 code2 mean2 count2 code3 mean3 count3
1 A 32 22 B 9 56 C 25 78
2 A 33 35 B 11 66 -1 -1 -1
请询问可能需要的任何其他信息。
编辑
请注意您使用的是香草熊猫而不是 modin.pandas 或任何其他版本的熊猫。我在使用 modin.pandas 时尝试执行问题时遇到了问题,但 vanilla pandas 工作得很好。
解决方案
用于GroupBy.cumcount
计数器,然后通过DataFrame.set_index
and重塑形状,对by 的DataFrame.unstack
第二级进行排序,最后将 MultiIndex 展平为:MultiIndex
DataFrame.sort_index
join
df = pd.DataFrame({'id': [1, 1, 1, 2, 2],
'code': ['A', 'B', 'C', 'A', 'B'],
'mean': [32, 9, 25, 33, 11],
'count': [22, 56, 78, 35, 66]})
print (df)
id code mean count
0 1 A 32 22
1 1 B 9 56
2 1 C 25 78
3 2 A 33 35
4 2 B 11 66
print (df.columns)
Index(['id', 'code', 'mean', 'count'], dtype='object')
print (df.columns.tolist())
['id', 'code', 'mean', 'count']
df['g'] = df.groupby('id').cumcount().add(1)
df = (df.set_index(['id','g'])
.unstack(fill_value=-1)
.sort_index(level=1, axis=1))
df.columns = df.columns.map(lambda x: f'{x[0]}{x[1]}')
对于转换id
为列使用reset_index
:
df = df.reset_index()
print (df)
id code1 count1 mean1 code2 count2 mean2 code3 count3 mean3
0 1 A 22 32 B 56 9 C 78 25
1 2 A 35 33 B 66 11 -1 -1 -1
df = df.reset_index()
推荐阅读
- javascript - 如何使用appendTo在div中获取div?
- set - Minizinc:连续输出 int 的决策变量集的值
- python - 分批训练,但在 Tensorflow 中使用 tf.estimators 执行单个图像分类
- c++ - 试图弄清楚如何使用外部值(.txt 文档)来存储值并将这些保存的值用作我的 .cpp 代码中的值
- import - 日志分析和应用程序洞察日志查询搜索表到 Sql 数据库。
- python - Python:如何从 pandas 数据框创建字典?
- c# - 计算心率变异性窗口 10 的 C# 或 C++ 源代码示例
- mysql - Web server & api server - 配置和代码上传
- node.js - 验证 POSTMAN 断言中返回的 json 响应不超过一个
- javascript - 脚本加载后如何运行函数