如何使用Pandas按订单组填充缺失的收货地址等字段值
使用Python Pandas填充同一订单下的缺失收货地址
你的订单数据格式如下:
| order number | shipping address | item |
|---|---|---|
| A123 | Canada | boots |
| A123 | null | socks |
| A123 | null | laces |
| B456 | California | shirt |
要实现同一订单下的null收货地址填充为该订单对应的有效地址,可以用以下两种简洁的Pandas方法:
方法1:按订单分组后向前填充(ffill)
这种方法先按订单号分组,然后对shipping address列使用向前填充,自动把同组内的非空值填充到后续的空值位置:
import pandas as pd # 构造示例数据 data = { 'order number': ['A123', 'A123', 'A123', 'B456'], 'shipping address': ['Canada', pd.NA, pd.NA, 'California'], 'item': ['boots', 'socks', 'laces', 'shirt'] } df = pd.DataFrame(data) # 按订单号分组,对收货地址列向前填充 df['shipping address'] = df.groupby('order number')['shipping address'].ffill() print(df)
方法2:用transform提取每组的非空值填充
如果每组只有一个有效地址,也可以提取每组的第一个非空值,然后批量填充到同组的空值位置:
# 提取每组的第一个非空收货地址 fill_values = df.groupby('order number')['shipping address'].transform(lambda x: x.dropna().iloc[0]) # 填充空值 df['shipping address'] = df['shipping address'].fillna(fill_values) print(df)
两种方法运行后都会得到处理后的结果:
| order number | shipping address | item |
|---|---|---|
| A123 | Canada | boots |
| A123 | Canada | socks |
| A123 | Canada | laces |
| B456 | California | shirt |
注意:如果你的数据中null是字符串类型的'null'而不是Pandas的缺失值(pd.NA/np.nan),需要先把字符串'null'转换为缺失值,再执行上述填充操作:
df['shipping address'] = df['shipping address'].replace('null', pd.NA)
内容的提问来源于stack exchange,提问作者user14461410
相关产品推荐
相关产品推荐

