【问题标题】:Repeat an element in a dataframe在数据框中重复一个元素
【发布时间】:2017-08-02 18:13:50
【问题描述】:

很抱歉这个基本问题,但我似乎无法弄清楚这一点。我有以下数据框:

df1
      a              
1     7           
2     26             
3     32            
4     41             
...   
37    7
38    9  

我将如何在第 37 个索引处重复该值两次,以便生成以下内容

df1
      a              
1     7           
2     26             
3     32            
4     41             
...   
37    7
38    7
39    9

我尝试使用 loc 无济于事:

 newp = df1[name].loc[np.repeat(df1.index[-2:].values, 1)] #get the 37th index value to repeat
 listofwty[0].loc[36] = newp
 listofwty[0].index = listofwty.index+1

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    您可以使用df.index.insert 插入另一个37 条目,然后使用df.reindex 复制该行:

    import pandas as pd
    df = pd.DataFrame({'a': [7, 26, 32, 41, 7, 9]}, index=[1, 2, 3, 4, 37, 38])
    index = df.index
    df = df.reindex(index.insert(index.get_loc(37), 37))
    print(df)
    

    产量

         a
    1    7
    2   26
    3   32
    4   41
    37   7
    37   7
    38   9
    

    请注意,这会创建一个具有非唯一索引的 DataFrame。制作索引标签 独一无二,请致电df = df.reset_index(drop=True)(如Scott Boston showed 在他的回答中)。

    【讨论】:

      【解决方案2】:

      你可以这样做,使用pd.concat,然后使用sort_index

      pd.concat([df,df.loc[[37]]]).sort_index().reset_index(drop=True)
      

      输出:

           a
      1    7
      2   26
      3   32
      4   41
      ...
      37   7
      38   7
      39   9
      

      【讨论】:

      • @codeninja, pd.concat([df,df.loc[[37]*2]]).sort_index().reset_index(drop=True)
      • 这行得通!我试图使用某种插入/追加功能,但你能解释一下这条线是如何运行的吗?
      • @MaxU 很好的评论。谢谢。
      • 您正在对数据框进行切片并将该切片连接回自身。 concat 接受一个数组,因此您可以在一个语句中执行尽可能多的切片。或者使用 MaxU 的方法对同一个切片进行多个。
      • @ScottBoston 啊,我现在明白了,一步一步地做这件事可以弄清楚到底发生了什么。相当优雅的解决方案。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 2019-09-20
      • 1970-01-01
      • 2019-09-20
      • 2020-11-05
      • 2019-05-14
      相关资源
      最近更新 更多