python - 根据某些条件插入行,填写数据
问题描述
我有以下数据框:
data={"Date":["8/4/2020","8/4/2020","8/4/2020","8/4/2020","8/4/2020"],
"Weight":[35,35,30,50,50],
"Subportfolio":["Portfolio1","Portfolio2","Portfolio3","Portfolio4","Portfolio5"],
"Portfolio Code":[1,1,1,2,2],
"Instrument":["","","","",""],
"Amount":["","","","",""]}
df=pd.DataFrame(data)
它看起来像这样:
Date Weight Subportfolio Portfolio Code Instrument Amount
0 8/4/2020 35 Portfolio 1 1
1 8/4/2020 35 Portfolio 2 1
2 8/4/2020 30 Portfolio 3 1
3 8/4/2020 50 Portfolio 4 2
4 8/4/2020 50 Portfolio 5 2
我想在新的投资组合代码开始之前插入一行。与此同时,新创建的行应该包含一些数据——总是相同的。我想实际实现这一点:
Date Weight Subportfolio Portfolio Code Instrument Amount
0 8/4/2020 35 Portfolio 1 1
1 8/4/2020 35 Portfolio 2 1
2 8/4/2020 30 Portfolio 3 1
3 8/4/2020 1 Exposure 1000000
4 8/4/2020 50 Portfolio 4 2
5 8/4/2020 50 Portfolio 5 2
6 8/4/2020 2 Exposure 1000000
我实际上没有尝试过任何事情,因为我不知道如何解决这个问题。我在想一些关于 groupby 的事情(通过:投资组合代码),但不知道如何继续。
解决方案
一种通用的方法是concat
排序:
(pd.concat([df,df[['Date','Portfolio Code']].drop_duplicates()
.assign(Instrument='Exposure',Amount=1000000)
])
.sort_values('Portfolio Code', kind='mergesort')
)
输出:
Date Weight Subportfolio Portfolio Code Instrument Amount
0 8/4/2020 35.0 Portfolio1 1
1 8/4/2020 35.0 Portfolio2 1
2 8/4/2020 30.0 Portfolio3 1
0 8/4/2020 NaN NaN 1 Exposure 1000000
3 8/4/2020 50.0 Portfolio4 2
4 8/4/2020 50.0 Portfolio5 2
3 8/4/2020 NaN NaN 2 Exposure 1000000
推荐阅读
- google-photos - 获取 Google 相册封面照片的 ID
- internet-explorer - VueJS 组件未在 IE11 中呈现
- reactjs - 如何使用 Jest 和 Enzyme 对包含 history.push 的反应事件处理程序进行单元测试?
- docker - docker-compose 命令 bash:没有这样的文件或目录
- python - 如何结合 Django 的“LoginRequiredMixin”和表单工具的“FormPreview”?
- c# - “全局元素......已经被声明”错误
- tcl - 如何防止第二个对话框关闭之前打开的对话框
- logout - 如何使用 xml 配置 ADFS 端点响应 URL
- node.js - 不添加日历和守望者
- c# - 用 System.IO.File.ReadAllLines 和一个可变的文件名 c# 填充列表框