伙计们
我在用例中搜索了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
正如您在预期数据框中看到的那样,0s
列中CP
的数量比Periods
列中的值小1,其余值为1。< / p>
我尝试了以下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
的新列将具有现金流量的时间值(考虑债券的半年现金流量)
答案 0 :(得分: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