python – Pandas:将行中具有相同键的行分组
发布时间:2020-12-20 11:08:25 所属栏目:Python 来源:网络整理
导读:在pandas中,我试图弄清楚如何使用相同的键对行进行分组,在一行中有一组包含组中的键(由id分组),一组不常见的功能的常用功能. 就像是 id C1 C2 Uk U10 x 1 2 3 41 y 5 6 7 82 x 1 2 9 103 y 5 6 3 11 这里的共同特征集是C1和C2,一组不常见的特征是Uk和U1,其中
在pandas中,我试图弄清楚如何使用相同的键对行进行分组,在一行中有一组包含组中的键(由id分组),一组不常见的功能的常用功能.
就像是 id C1 C2 Uk U1 0 x 1 2 3 4 1 y 5 6 7 8 2 x 1 2 9 10 3 y 5 6 3 11 这里的共同特征集是C1和C2,一组不常见的特征是Uk和U1,其中组的密钥是Uk. 在此示例中,所需的结果是: id C1 C2 Uk3_U1 Uk7_U1 Uk9_U1 0 x 1 2 4 NaN 10.0 1 y 5 6 11 8.0 NaN 当然,它们可能是一个U2列(嗨Bono!),但这使得示例更难写,因为结果中的列数会更大. 生成此数据集的代码是: pd.DataFrame({'id': ['x','y','x','y'],'C1': [1,5,1,5],'C2': [2,6,2,6],'Uk': [3,7,9,3],'U1': [4,8,10,11]}) 谢谢. 解决方法
枢轴连接
您可以使用 new_df = new_df = df.pivot('id','Uk','U1') .add_prefix('Uk').add_suffix('_U1').reset_index() print(new_df) Uk id Uk3_U1 Uk7_U1 Uk9_U1 0 x 4.0 NaN 10.0 1 y 11.0 8.0 NaN new_df.join(df.loc[:,'C1':'C2']) id Uk3 Uk7 Uk9 C1 C2 0 x 4.0 NaN 10.0 1 2 1 y 11.0 8.0 NaN 5 6 在更一般的情况下,您想要转动多个列[C1 … Cn],您可以执行以下操作.比如你有以下df: id C1 C2 Uk U1 U2 0 x 1 2 3 4 5 1 y 5 6 7 8 2 2 x 1 2 9 10 10 3 y 5 6 3 11 11 你可以这样做: values_to_pivot = df.columns.difference(['id','C1','C2','Uk']) new_df = df.pivot('id',values_to_pivot).reset_index() print(new_df) id U1 U2 Uk 3 7 9 3 7 9 0 x 4.0 NaN 10.0 5.0 NaN 10.0 1 y 11.0 8.0 NaN 11.0 2.0 NaN new_df.join(df.loc[:,'C1':'C2']) (id,) (U1,3) (U1,7) (U1,9) (U2,3) (U2,7) (U2,9) C1 C2 0 x 4.0 NaN 10.0 5.0 NaN 10.0 1 2 1 y 11.0 8.0 NaN 11.0 2.0 NaN 5 6 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |