我创建了一个熊猫系列列表,每个系列都按 1 到 100 之间的数字索引,例如
Index Value
1 62.99
4 64.39
37 75.225
65 88.12
74 89.89
79 93.30
88 94.30
92 95.83
100 100.00
我想做的,无论是当它是一个系列时,还是在调用 .to_numpy(( 后作为一个数组,就是填写它,以便我的系列有 100 个值(1 到 100(,任何新条目都具有以前的现有值,即
Index Value
1 62.99
2 62.99
3 62.99
4 64.39
5 64.39
6 64.39
...
...
36 64.39
37 75.225
38 75.225
等等。
我可以通过循环访问每个系列并检查值的变化,以冗长的方式以编程方式做到这一点;我的问题是,是否有一个版本的 Series.repeat(( 可以一次点击,或者一个 numpy 函数可以用我的 100 个值以这种方式"填充"我的数组?
提前感谢您的阅读和任何建议。这不是家庭作业;这是一个真正的问题,所以如果我的提问风格不像你期望的那样,请不要攻击我。
你需要做的是预先填充一个系列中的值: 此代码
series = pd.Series([33.2, 36, 39, 55], index=[3, 6, 12, 14], name='series')
indices = range(100)
df = pd.DataFrame(indices)
series = df.join(series).ffill()['series']
生产
0 NaN
1 NaN
2 NaN
3 33.2
4 33.2
...
95 55.0
96 55.0
97 55.0
98 55.0
99 55.0
第一个值 ar NaN,因为序列中没有要填充它们的值
这就是我采用的解决方案 - 带有 fillna(0( 的 ffill((,连接到 range(1,101(。我不得不遍历一个更大的数据集,该数据集需要首先按 ID 分组/为每个"存储桶"获取最大"Pct":-
j=df[['ID','Bucket','Pct']].groupby(['ID','Bucket']).max()
for i in df['ID'].unique():
index=pd.DataFrame(range(1,101))
index.columns=['Bucket']
k=pd.merge(index,j.loc[i],how='left',on='Bucket').ffill().fillna(0)
In:
Bucket Pct
3 0.03
3 0.1
3 0.26
3 0.42
3 0.45
3 0.59
3 0.69
3 0.83
3 0.86
3 0.91
3 0.94
3 0.98
4 1.1
... ...
91 98.89
93 99.08
94 99.17
94 99.26
94 99.43
94 99.48
94 99.63
100 100.0
Out:
Bucket Pct
1 0.00
2 0.00
3 0.98
4 1.83
5 22.83
... ...
91 98.89
92 98.89
93 99.08
94 99.63
95 99.63
96 99.63
97 99.63
98 99.63
99 99.63
100 100.00
再次非常感谢你们俩!