首页 > 解决方案 > 将行数据移动到列(不转置)

问题描述

假设我user - child有多行的关系

   user_id  child_id  birth_date gender
0        1       1.0  2018-01-01      m
1        1       2.0  2018-01-03      f
2        1       3.0  2018-01-04      m
3        2       NaN        None   None

现在我想挑选最小和最大的孩子并将它们放在列中

   user_id kid_1_birth_date kid_1_gender kid_2_birth_date kid_2_gender
0        1       2018-01-01            m       2018-01-04            m
1        2             None         None             None         None

我目前正在做groupby,然后group.iterrows向新创建的数据框添加行,想知道是否有更好的方法

我正在使用数据框并使用 tf.data 转换为 tf.data tf.data.Dataset.from_tensor_slices,并且我正在输入最小的孩子和最年长的孩子的 age/gender ,这就是我首先转换数据的原因。

标签: pythonpandas

解决方案


一种方式drop_duplicates,然后merge

df1=df.sort_values('birth_date').drop_duplicates('user_id')
df2=df.sort_values('birth_date').drop_duplicates('user_id',keep='last')
df1.drop('child_id',1).merge(df2.drop('child_id',1),on='user_id',suffixes=('young','old'))
Out[474]: 
   user_id birth_dateyoung genderyoung birth_dateold genderold
0        1      2018-01-01           m    2018-01-04         m
1        2             NaT        None           NaT      None

推荐阅读