【问题标题】:merge rows into new column value将行合并到新的列值
【发布时间】:2022-11-23 01:40:42
【问题描述】:

我正在获取一个 df,它是所有 dup 值对,然后从第二行获取第二列值并将其添加到名为“new_amt”的新列的第一行,然后为第二行和新的第三列插入 NaN。在我删除所有包含 NaN 的行之后。

所以数据框看起来像这样:

ref_num Amt
row 1 1 10
row 2 1 20
row 3 2 5
row 4 2 15
row 5 3 12
row 6 3 7

之后它应该是这样的:

ref_num Amt new_Amt
row 1 1 10 20
row 2 1 20 NaN
row 3 2 5 15
row 4 2 15 NaN
row 5 3 12 7
row 6 3 7 NaN

我认为 lambda 函数可以在我让 else 语句为所有第二个 dup 行返回 NaN 的地方工作,但我可以弄清楚语法。

df['new_Amt'] = df.apply(lambda x : x['Amt'] 如果 x['ref_num'] == x['ref_num'] 否则 x['new_Amt'] 是 NaN)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    为什么不同时执行这两个操作(按照您的描述解决重复项并删除冗余行)?

    k = 'ref_num'
    newdf = df.drop_duplicates(subset=k, keep='first').merge(
        df.drop_duplicates(subset=k, keep='last'), on='ref_num', suffixes=('', '_new'))
    >>> newdf
       ref_num  Amt  Amt_new
    0        1   10       20
    1        2    5       15
    2        3   12        7
    

    另一种可能性:

    gb = df.groupby('ref_num')['Amt']
    newdf = pd.concat([gb.first(), gb.last()], axis=1, keys=['Amt', 'new_Amt']).reset_index()
    >>> newdf
       ref_num  Amt  new_Amt
    0        1   10       20
    1        2    5       15
    2        3   12        7
    

    注意:在您的问题中,不清楚 'row 1''row 2' 等是否是索引,是否要保留等。如果最终输出中需要它们,请告诉我们它们是否应该出现以及如何出现.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 2021-08-09
      • 1970-01-01
      • 2022-10-26
      • 2019-07-09
      • 2022-07-21
      相关资源
      最近更新 更多