将一列的值复制到熊猫的后几行

时间:2020-04-25 18:07:33

标签: python-3.x pandas dataframe data-analysis

我有一个数据框,其中有一个唯一列以及多个列,如下所示:

   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)

1 个答案:

答案 0 :(得分:1)

如果索引默认为RangeIndex,则可以将整数除以5,然后将GroupBy.transformGroupBy.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