python - 在python中组合元组数据框列表
问题描述
我有一个大型数据集,其中每两行需要组合在一起并组合成一个较长的行,基本上是复制标题并将第二行添加到第一行。这是一个小样本:
df = pd.DataFrame({'ID' : [1,1,2,2],'Var1': ['A', 2, 'C', 7], 'Var2': ['B', 5, 'D', 9]})
print(df)
ID Var1 Var2
1 A B
1 2 5
2 C D
2 7 9
我将不得不对我的“ID”行进行分组,因此我运行:
grouped = df.groupby(['ID'])
grp_lst = list(grouped)
这导致了一个按 id 分组的元组列表,其中元素 1 是我想要组合的分组数据框。
期望的结果是一个看起来像这样的数据框:
ID Var1 Var2 ID.1 Var1.1 Var2.1
1 A B 1 2 5
2 C D 2 7 9
我必须在一个大型数据集上执行此操作,其中“ID”用于对行进行分组,然后我想基本上将底行添加到顶部结束。
任何帮助将不胜感激,我认为有一种比我做的更简单的方法。
提前致谢!
解决方案
让我们试试:
i = df.groupby('ID').cumcount().astype(str)
df_out = df.set_index([df['ID'].values, i]).stack().unstack([2, 1])
df_out.columns = df_out.columns.map('.'.join)
细节:
group
上的数据框ID
并用于cumcount
创建顺序计数器以唯一标识每个行ID
:
>>> i
0 0
1 1
2 0
3 1
dtype: object
在数据帧中创建多级索引,第一级设置为ID
值,第二级设置为上述顺序计数器,然后使用stack
后跟unstack
以所需格式重塑数据帧:
>>> df_out
ID Var1 Var2 ID Var1 Var2 #---> Level 0 columns
0 0 0 1 1 1 #---> Level 1 columns
1 1 A B 1 2 5
2 2 C D 2 7 9
Index.map
最后使用with展平多级列join
:
>>> df_out
ID.0 Var1.0 Var2.0 ID.1 Var1.1 Var2.1
1 1 A B 1 2 5
2 2 C D 2 7 9
推荐阅读
- class - 使用函数或集合的数学符号描述类和类继承
- reinforcement-learning - 深度 q 学习 (dqn) 和神经拟合 q 迭代之间的区别
- python - 使用现有数据框的分组比率构建新数据框
- shell - 如何在 make 4.2 之前获取退出状态和 $(shell 命令) 的输出?
- javascript - Nest 无法解决依赖关系
- express - 为什么日期不显示在哈巴狗表单输入中?
- lc3 - 如何将 R2 的值更改为负数,以便我可以减去两个数字?
- c++ - 覆盖继承的函数时出现 LNK1169 错误
- pci-compliance - PHP 使用 PCI 标准存储卡数据或使用第三方存储卡数据?
- python - 运行 Django 服务器时出错 - 空路径与这些中的任何一个都不匹配