首页 > 解决方案 > 基于数组更新数据框列中的值,其中行号指示范围的开始

问题描述

我有以下数据框和两个数组填充行和销售代码。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

标签: pythondataframedata-wrangling

解决方案


你可以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

推荐阅读