【问题标题】:I want to drag a column value which are in integer with respect to another column我想拖动一个相对于另一列为整数的列值
【发布时间】:2022-08-17 17:51:19
【问题描述】:

下面是我的数据框。

df = pd.DataFrame({\'vin\':[\'aaa\',\'aaa\',\'aaa\',\'bbb\',\'bbb\',\'bbb\',\'ddd\',\'eee\',\'eee\',\'fff\'],
                \'c1\':[35,\'NA\',\'NA\',\'NA\',4,\'NA\',\'NA\',\'NA\',56,406],
                \'c2\':[35,\'NA\',\'NA\',\'NA\',43,\'NA\',\'NA\',\'NA\',67,77],
                \'c3\':[36,\'NA\',\'NA\',\'NA\',104,\'NA\',\'NA\',\'NA\',44,306]})

我想相对于列 \'vin\' 拖动 \'c1\' \'c2\' 和 \'c3\' 的整数值。

以下是预期的输出: -

df = pd.DataFrame({\'vin\':[\'aaa\',\'aaa\',\'aaa\',\'bbb\',\'bbb\',\'bbb\',\'ddd\',\'eee\',\'eee\',\'fff\'],
                \'c1\':[35,35,35,4,4,4,\'NA\',56,56,406],
                \'c2\':[35,35,35,43,43,43,\'NA\',67,67,77],
                \'c3\':[36,36,36,104,104,104,\'NA\',44,44,306]})

笔记:\'vin\' 列 \'ddd\' 的值将保持为 \'NA\',因为没有可用于 \'ddd\' 的整数值。

我尝试了 ffill() 或 groupbyffill() 但我没有得到预期的输出。 下面是几行代码,我试过了。

#(1)
df[\'c1\'] = df.groupby([\'vin\'])[\'c1\'].ffill()


#(2)
df[[\"c1\",\"c2\" \"c3\"]] = df[[\"c1\", \"c2\",\"c3\"]].fillna(df.groupby([\'vin\'])[[\"c1\", \"c2\",\"c3\"]].ffill())


#(3)
df[\"c1\"] = df.groupby(\'vin\')[\'c1\'].transform(lambda x: x.ffill())

    标签: python pandas group-by ffill


    【解决方案1】:

    IIUC 用途:

    c = ["c1","c2", "c3"]
    df[c] = df.replace('NA',np.nan).groupby('vin')[c].ffill()
    print (df)
       vin     c1    c2     c3
    0  aaa   35.0  35.0   36.0
    1  aaa   35.0  35.0   36.0
    2  aaa   35.0  35.0   36.0
    3  bbb    NaN   NaN    NaN
    4  bbb    4.0  43.0  104.0
    5  bbb    4.0  43.0  104.0
    6  ddd    NaN   NaN    NaN
    7  eee    NaN   NaN    NaN
    8  eee   56.0  67.0   44.0
    9  fff  406.0  77.0  306.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      相关资源
      最近更新 更多