各位,
我已在 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
列中的 0
数量比 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
的新列将包含现金流量的时间值(考虑债券的半年现金流量)
最佳答案
这里似乎不需要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
关于python - Pandas Groupby 并使用自定义值创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53606528/