Python - 在Group by组中应用函数填充N/A

2024-10-02 20:43:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两列中缺少值的数据集,我想用上一个日期前几行中的值来填充它。 因此,有WeightHeight应该根据预定义的Category的最后日期和参考WorkerID(在先前填充的行中预定义)用另一行的值填充,例如:

数据示例:

Ind  Date       WorkerID  Category   Weight   Height   Kind_eat
1    31/12/17    E145-46     cat      2.35      0.6       1  
2    01/09/18    M147-50     cat      4.78      0.8       2
3    27/05/18    K178-56     dog      7.03      0.75      3
4    09/02/18    T106-20     mouse    NaN       NaN       1
5    18/03/19    M147-50     cat      NaN       NaN       2
6    25/03/19    K178-56     dog      NaN       NaN       3
7    04/01/17    T106-20     mouse    0.75      0.15      4
8    01/04/19    T156-10     dog      6.99      0.13      4

因此,WeightHeight列中的NaN应该基于WeightHeight列来填充,这些列引用的是NaN上一个可用日期的非NaN值,该日期早于Date中的实际值。你知道吗

例如

5    18/03/19    M147-50     cat      NaN       NaN       2

应该由WeightHeightline2填充:

5    18/03/19    M147-50     cat      4.78      0.8       2

我试着用group-byfillna方法为group完成它,但它没有填充任何内容。你知道吗

df.groupby(['Date','WorkerID'], as_index = False).apply(lambda group: group.ffill())

我还尝试使用: df.groupby(['Date','WorkedID']).ffill().reindex(df.columns, axis=1)

实际结果是:-NaN没有正确的填充

Ind  Date       WorkerID  Category   Weight   Height   Kind_eat
1    31/12/17    E145-46     cat      2.35      0.6       1  
2    01/09/18    M147-50     cat      4.78      0.8       2
3    27/05/18    K178-56     dog      7.03      0.75      3
4    09/02/18    T106-20     mouse    NaN       NaN       1
5    18/03/19    M147-50     cat      NaN       NaN       2
6    25/03/19    K178-56     dog      NaN       NaN       3
7    04/01/17    T106-20     mouse    0.75      0.15      4
8    01/04/19    T156-10     dog      6.99      0.13      4

预期结果应为:

Ind  Date       WorkerID  Category   Weight   Height   Kind_eat
1    31/12/17    E145-46     cat      2.35      0.6       1  
2    01/09/18    M147-50     cat      4.78      0.8       2
3    27/05/18    K178-56     dog      7.03      0.75      3
4    09/02/18    T106-20     mouse    0.75      0.15      1
5    18/03/19    M147-50     cat      4.78      0.8       2
6    25/03/19    K178-56     dog      7.03      0.75      3
7    04/01/17    T106-20     mouse    0.75      0.15      4
8    01/04/19    T156-10     dog      6.99      0.13      4

如果你有什么想法,我将不胜感激。(谢谢)


Tags: dategroupnancatheightweightdogcategory
1条回答
网友
1楼 · 发布于 2024-10-02 20:43:49

我想你必须先把Date转换成datetime。你知道吗

df['Date'] = pd.to_datetime(df['Date'])

sort_valuesby Dategroupbywith ['WorkerID', 'Category']然后ffill。你知道吗

df = df.sort_values('Date').groupby(['WorkerID', 'Category']).ffill().sort_index()

df
    WorkerID Category       Date  Weight  Height  Kind_eat
Ind                                                       
1    E145-46      cat 2017-12-31    2.35    0.60         1
2    M147-50      cat 2018-01-09    4.78    0.80         2
3    K178-56      dog 2018-05-27    7.03    0.75         3
4    T106-20    mouse 2018-09-02    0.75    0.15         1
5    M147-50      cat 2019-03-18    4.78    0.80         2
6    K178-56      dog 2019-03-25    7.03    0.75         3
7    T106-20    mouse 2017-04-01    0.75    0.15         4
8    T156-10      dog 2019-01-04    6.99    0.13         4

相关问题 更多 >