【问题标题】:Pandas fillna by group [duplicate]熊猫按组填写[重复]
【发布时间】:2022-02-04 21:53:12
【问题描述】:

首先,这听起来是一个非常愚蠢的问题,我认为答案应该很简单。

然而......我被这个问题困扰了好几个星期,但我仍然无法解决它。

我需要的是在组中使用fillna(method="ffill") 之类的东西。考虑下面的 DataFrame:

import pandas as pd

df = pd.read_csv("something.csv"
>>> df
    group date        price
0   1     2021-12-01  .15
1   1     2022-01-15  NaN
2   1     2021-02-03  .35
3   2     2021-12-01  NaN
4   2     2021-12-15  2.5
5   2     2022-02-03  NaN
6   3     2021-11-15  3.25
6   3     2021-12-03  NaN
6   3     2022-01-06  NaN

想要的输出是:

>>> df
    group date        price
0   1     2021-12-01  .15
1   1     2022-01-15  .15
2   1     2021-02-03  .35
3   2     2021-12-01  NaN
4   2     2021-12-15  2.5
5   2     2022-02-03  2.5
6   3     2021-11-15  3.25
6   3     2021-12-03  3.25
6   3     2022-01-06  3.25

到目前为止我所做的尝试:

df["price"] = df.groupby(["group", "date"])["price"].ffill()
df["price"] = df.groupby(["group", "date"])["price"].fillna(method="ffill")
df = df.groupby(["group", "date"]).fillna(method="ffill")
df["price"] = df.groupby(["group", "date"])["price"].apply(lambda x :x.ffill())

我找到了几个类似的答案,但没有一个给出预期的结果。

【问题讨论】:

    标签: python python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    我认为你错过了简单的:

    df['price'] = df.groupby('group')['price'].ffill()
    

    确实,您不应该按日期分组,因为您只有大小为 1 的组。

    输出(为清楚起见使用不同的列):

       group        date  price  price_ffill
    0      1  2021-12-01   0.15         0.15
    1      1  2022-01-15    NaN         0.15
    2      1  2021-02-03   0.35         0.35
    3      2  2021-12-01    NaN          NaN
    4      2  2021-12-15   2.50         2.50
    5      2  2022-02-03    NaN         2.50
    6      3  2021-11-15   3.25         3.25
    6      3  2021-12-03    NaN         3.25
    6      3  2022-01-06    NaN         3.25
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-13
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2018-06-03
      • 2023-03-14
      相关资源
      最近更新 更多