我有一个很大的数据集,其中每两行需要组合在一起并组合成一个更长的行,基本上是复制标题并将第二行添加到第一行。这是一个小样本:
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
有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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句