python - 基于数组更新数据框列中的值,其中行号指示范围的开始
问题描述
我有以下数据框和两个数组填充行和销售代码。Fillrows 是我通过提取满足条件的行生成的数组。为了能够识别产生销售的人,我需要用 SalesCode 填充一个额外的列。在 fillrows 中,我有每个 SalesCode 的起始行,它对应于数组 salescodes 中的代码。
df = pd.DataFrame([['', 120], ['', 300], ['', 160],['', 220], ['', 400], ['', 560],['', 860],['',900]], columns=['SalesCode', 'Sales'])
fillrows=[0,3,5]
salescodes =['XA','AC','BC']
SalesCode Sales
0 120
1 300
2 160
3 220
4 400
5 560
6 860
7 900
需要有这个输出
Output
SalesCode Sales
0 XA 120
1 XA 300
2 XA 160
3 AC 220
4 AC 400
5 BC 560
6 BC 860
7 BC 900
解决方案
你可以join
制作一个系列和ffill
:
s = pd.Series(salescodes, index=fillrows[:-1], name='SalesCode')
df2 = df.drop('SalesCode', axis=1).join(s).ffill()
注意。drop
如果 df 中不存在空的“SalesCode”列,则不需要该部分
输出:
>>> df2
Sales SalesCode
0 120 XA
1 300 XA
2 160 XA
3 220 AC
4 400 AC
5 560 BC
6 860 BC
7 900 BC
推荐阅读
- openlayers - 为什么 MultilineString 图层不能正确显示
- javascript - 如何使用 chrome 扩展重新设计 Google 日历创建活动页面
- r - R 数值:精确或四舍五入的值
- angular - Meteor 1.6.1.1 Docker meteorInstall 未定义
- python - 使用python登录instagram
- python - 对连续矩阵中的许多数组执行高斯拟合并保存结果
- r - 使用gather和ggplot保持因子水平
- r - R中的每小时时间序列。 ts(... start) 如何工作?
- machine-learning - 欺诈检测的特征工程
- angularjs - 在 KendoUI Datepciker 中的当前日期添加 +1/2/3/4 周的任何快捷方式?