基于数组更新dataframe列中的值,行号表示范围的开始



我有以下数据框和两个数组fillrows和salescodes。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

您可以joinffill精心制作的系列:

s = pd.Series(salescodes, index=fillrows[:-1], name='SalesCode')
df2 = df.drop('SalesCode', axis=1).join(s).ffill()

NB。如果SalesCode"为空,则不需要drop部分。df

中不存在列输出:

>>> 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

您可以简单地遍历fillrows数组并为salescode添加值。注意:我将最后一个索引更改为Len(df),因为salescode中没有第四个值可以从idx 7开始;请随意玩。

import pandas as pd
from itertools import repeat
df = pd.DataFrame([['', 120], ['', 300], ['', 160],['', 220], ['', 400], ['', 560],['', 860],['',900]], columns=['SalesCode', 'Sales'])
fillrows=[0,3,5, len(df)]
salescodes =['XA','AC','BC']
SalesCodes = []
for idx, _ in enumerate(fillrows[:-1]):
SalesCodes.extend(repeat(salescodes[idx], fillrows[idx+1] - fillrows[idx]))
df = df.assign(SalesCode=SalesCodes)
> df
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

相关内容

  • 没有找到相关文章

最新更新