Python 从不同的行和列中获取值

Python get value from different rows and columns

我有一个像这样的数据框: 数据框存储 phone 孩子们的数字、最喜欢的食物和最喜欢的玩具(用不同的 ID 签名)。数据在不同的行和列中是分开的。有些行可能只有 Id 而没有其他内容。输入可能如下所示:

|Id|phone_number|food  |toy |
|--|------------|------|----|
|01|            |apple |    |
|01|9995552222  |banana|    |
|01|            |      |ball|
|01|9995552222  |orange|    |
|02|3332226666  |      |    |
|02|            |boba  |    |
|02|            |      |    |

我想得到的: 我想将不同行中的值组合在一起,使每一行都是唯一的。输出可能如下所示:

|Id|phone_number|food  |toy |
|--|------------|------|----|
|01|9995552222  |apple |ball|
|01|9995552222  |banana|ball|
|01|9995552222  |orange|ball|
|02|3332226666  |boba  |    |

谢谢

test = pd.DataFrame({'Id': ['01', '01', '01', '01', '02', '02', '02'], 
                'phone_number': ['', '9995552222', '', '9995552222', '3332226666', '', ''], 
                'food': ['apple', 'banana', '', 'orange', '', 'boba', ''], 
                'toy ': ['', '', 'ball', '', '', '', '']})

您可以尝试 groupby Id 列,然后用 bfillffill 填充 NaN 列。最后删除 'phone_number'、'food'、'toy'.

中的重复项
test = test.replace('', pd.NA)

out = (test.groupby('Id')
       .apply(lambda g: g.bfill().ffill())
       .drop_duplicates(['phone_number', 'food', 'toy']) # 'toy ' in your given dataframe
       .fillna('')
       )
print(df)

   Id phone_number    food   toy
0  01   9995552222   apple  ball
1  01   9995552222  banana  ball
2  01   9995552222  orange  ball
4  02   3332226666    boba