【问题标题】:Replicate value of a column to next few rows in pandas将列的值复制到熊猫中的下几行
【发布时间】:2020-04-25 18:07:33
【问题描述】:

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

   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

我正在通过以下方式尝试此操作。它将列数据类型更改为浮点类型。我正在寻找在 pandas 中实现这一目标的任何有效方法。

下面是我的代码

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)

【问题讨论】:

  • 请根据示例发布预期输出

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2017-07-21
    • 2015-12-17
    • 2020-07-07
    • 2022-12-21
    • 2021-05-06
    相关资源
    最近更新 更多