我有一个数据框,其中有一个唯一列以及多个列,如下所示:
UniqueNumber Values
0 69444108688 500
1 66023511069 100
2 53313124505 200
3 95336385161 300
4 53923124505 400
5 96498947724 250
6 38933995601 430
7 13182151675 595
8 68184277619 792
9 87329074618 800
数据帧的大小大约为1000,我试图抽取一些随机样本,并复制“ UniqueNumber”列的每四个连续值的值,并在第5个位置重复该值。我的预期输出如下数据框
UniqueNumber Values
0 69444108688 500
1 69444108688 100
2 69444108688 200
3 69444108688 300
4 69444108688 400
5 96498947724 250
6 96498947724 430
7 96498947724 595
8 96498947724 792
9 96498947724 800
我正在尝试通过以下方式进行此操作。它将列数据类型更改为浮点类型。我正在寻找任何有效的方法来实现这一目标。
下面是我的代码
df_sample = df.sample(100)
unique_vals = df_sample['UniqueNumber'].tolist()
for i in range(0,len(unique_vals) - 1, 1):
if i%5 !=0 :
unique_vals[i] = np.nan
df_sample['UniqueNumber'] = unique_vals
df_sample['UniqueNumber'].ffill(axis = 0, inplace = True)
答案 0 :(得分:1)
如果索引默认为RangeIndex
,则可以将整数除以5
,然后将GroupBy.transform
与GroupBy.first
一起使用:
df['UniqueNumber'] = df.groupby(df.index // 5)['UniqueNumber'].transform('first')
或者如果某些常规索引值创建了辅助数组:
df['UniqueNumber'] = df.groupby(np.arange(len(df)) // 5)['UniqueNumber'].transform('first')
print (df)
UniqueNumber Values
0 69444108688 500
1 69444108688 100
2 69444108688 200
3 69444108688 300
4 69444108688 400
5 96498947724 250
6 96498947724 430
7 96498947724 595
8 96498947724 792
9 96498947724 800
另一个想法是将缺少值的浮点值转换为integers:
m = np.arange(len(df)) % 5 == 0
df['UniqueNumber'] = df['UniqueNumber'].where(m).astype('Int64').ffill().astype('int64')
print (df)
UniqueNumber Values
0 69444108688 500
1 69444108688 100
2 69444108688 200
3 69444108688 300
4 69444108688 400
5 96498947724 250
6 96498947724 430
7 96498947724 595
8 96498947724 792
9 96498947724 800