加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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]})

谢谢.

解决方法

枢轴连接

您可以使用pivot轻松完成此操作,并使用join与原始df结合使用:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读