【问题标题】:How to add a row into groupby groups with one value change in each newly inserted row?如何将一行添加到 groupby 组中,并在每个新插入的行中更改一个值?
【发布时间】:2021-12-17 15:23:49
【问题描述】:

让我们说我有一个如下的数据框:

effective_date,md_code,prop_dtls
2021-03-23,comm,car
2021-03-23,comm,bike
2021-03-23,comm,scooter
2021-03-24,comm,car
2021-03-24,comm,bike
2021-03-24,comm,scooter
2021-03-12,dme,bus
2021-03-12,dme,eco
2021-03-12,dme,alto
2021-03-14,dme,bus
2021-03-14,dme,eco
2021-03-14,dme,alto
2021-03-12,equity,bus
2021-03-12,equity,eco
2021-03-12,equity,alto
2021-03-14,equity,bus
2021-03-14,equity,eco
2021-03-14,equity,alto

我想在每个组(groupby(by=['md_code','prop_dtls'])) 中插入一行,在组中具有相同的effective_datemd_code 值,但更改prop_dtls 值,这也是一个固定值,即'nano'

所以我的预期输出应该是这样的:

effective_date,md_code,prop_dtls
2021-03-23,comm,car
2021-03-23,comm,bike
2021-03-23,comm,scooter
2021-03-23,comm,nano      +added row
2021-03-24,comm,car
2021-03-24,comm,bike
2021-03-24,comm,scooter
2021-03-24,comm,nano      +added row
2021-03-12,dme,bus
2021-03-12,dme,eco
2021-03-12,dme,alto
2021-03-12,dme,nano      +added row
2021-03-14,dme,bus
2021-03-14,dme,eco
2021-03-14,dme,alto
2021-03-14,dme,nano      +added row
2021-03-12,equity,bus
2021-03-12,equity,eco
2021-03-12,equity,alto
2021-03-12,equity,nano   +added row
2021-03-14,equity,bus
2021-03-14,equity,eco
2021-03-14,equity,alto
2021-03-14,equity,nano   +added row

如何使用 pandas 来做到这一点?

【问题讨论】:

    标签: python pandas group-by data-science


    【解决方案1】:

    您可以groupbyeffective_datamd_code 列,然后使用concatappend 为每个组添加一个新行。最后,使用ffill 填充两个groupby 列中的NaN 值。

    代码:

    g = df.groupby(['effective_date', 'md_code'])
    pd.concat([i.append({'prop_dtls': 'nano'}, ignore_index=True) for _, i in g]).ffill()
    

    结果:

      effective_date   md_code  prop_dtls
    0     2021-03-12       dme        bus
    1     2021-03-12       dme        eco
    2     2021-03-12       dme       alto
    3     2021-03-12       dme       nano
    0     2021-03-12    equity        bus
    1     2021-03-12    equity        eco
    2     2021-03-12    equity       alto
    3     2021-03-12    equity       nano
    0     2021-03-14       dme        bus
    1     2021-03-14       dme        eco
    2     2021-03-14       dme       alto
    3     2021-03-14       dme       nano
    0     2021-03-14    equity        bus
    1     2021-03-14    equity        eco
    2     2021-03-14    equity       alto
    3     2021-03-14    equity       nano
    0     2021-03-23      comm        car
    1     2021-03-23      comm       bike
    2     2021-03-23      comm    scooter
    3     2021-03-23      comm       nano
    0     2021-03-24      comm        car
    1     2021-03-24      comm       bike
    2     2021-03-24      comm    scooter
    3     2021-03-24      comm       nano
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-18
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 2013-09-14
      • 2013-07-30
      • 1970-01-01
      相关资源
      最近更新 更多