【问题标题】:Pandas Groupby and create new column with custom valuesPandas Groupby 并使用自定义值创建新列
【发布时间】:2018-12-04 05:55:27
【问题描述】:

伙计们,

我在 StackOverflow 上搜索了我的用例,但找不到任何有用的东西。如果您觉得这个问题已经解决,请指出相应的问题。

用例。

我有以下数据框。

  Maturity,Periods  
  0.5,2   
  0.5,2   
  1.0,3  
  1.0,3   
  1.0,3  

如您所见,maturity 列根据periods 列中的数字重复。现在我想要完成的是创建一个新列,该列将除每个分组成熟度的 1 个值外全为 0。所以预期的数据框是这样的

  Maturity,Periods,CP   
  0.5,2,0  
  0.5,2,1   
  1.0,3,0    
  1.0,3,0   
  1.0,3,1  

正如您在预期的数据框中看到的那样,CP 列中的0s 的数量比Periods 列中的值小1,剩余的值为1。

我尝试了下面的 pandas groupby 操作,但失败了。

new_df['CP'] = new_df.groupby(['Maturity'])['Periods'].apply(lambda x: np.zeros((x-1, 1)) + np.array([1.0])).reset_index()

谁能指出我哪里出错了?

更新编辑:

作为上述问题的后续,如何使用 Pandas 的操作解决以下方法?

使用上面的数据框,我想创建新列,但预期的输出是这样的:

Maturity,Periods,CP,TimeCF  
0.5,2,0,0.5
0.5,2,1,0.5

1.0,3,0,0.5
1.0,3,0,1.0
1.0,3,1,1.0

1.5,4,0,0.5
1.5,4,0,1.0
1.5,4,0,1.5
1.5,4,1,1.5

TimeCF 的新列将包含现金流的时间值(考虑债券的半年度现金流)

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    您似乎不需要groupby 在这里...试试这个:

    df['CP'] = 0
    df.loc[df['Maturity'].ne(df['Maturity'].shift(-1)), 'CP'] = 1
    
    print(df)
       Maturity  Periods  CP
    0       0.5        2   0
    1       0.5        2   1
    2       1.0        3   0
    3       1.0        3   0
    4       1.0        3   1
    

    如果groupby是不可避免的,你可以像以前一样使用它:

    df['CP'] = 0
    df.loc[df.groupby('Maturity').apply(lambda x: x.index[-1]), 'CP'] = 1
    
    print(df)
       Maturity  Periods  CP
    0       0.5        2   0
    1       0.5        2   1
    2       1.0        3   0
    3       1.0        3   0
    4       1.0        3   1
    

    【讨论】:

    • 是的,它奏效了。之前不知道这个ne 操作。谢谢。
    • 您将如何解决更新后的问题编辑?我尝试使用 groupby 和 reset_index() 的某种组合,但无法达到预期效果。
    • @sgokhales 我现在不在办公桌前,所以如果你能等几个小时,我会看看。否则,如果您赶时间,我建议您打开一个新问题作为此问题的扩展
    • np。您可以稍后查看。
    • @sgokhales 好的,请您解释一下:“TimeCF 的新列将具有现金流的时间值(考虑债券的半年度现金流)”您刚才说了很多几乎没有背景的事情(什么是现金流?债券?半年度?)
    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 2021-05-16
    • 2020-11-28
    • 2020-02-05
    • 2022-11-23
    • 2022-10-13
    相关资源
    最近更新 更多