在熊猫数据框中的特定索引处添加新行

时间:2020-03-02 08:23:02

标签: python regex pandas dataframe

我已经阅读了与stackoverflow中可用的问题相关的所有答案,但是我的问题与可用的答案几乎没有什么不同。我有非常大的数据框,并且该数据框的某些部分在后面-

Input Dataframe is like
    A          B                                                                       C       D
0  foot     17/1: OGChan_2020011717711829281829281  , 7days                           ...      
1  arm     this will processed after                                                  ;;;
2  leg     go_2020011625692400374400374 16/1: Id Imerys_2020011618188744093744093    
3  head    xyziemen_2020011510691787006787006 en_2020011510749462801462801            ;;;                                                     
:   :             :                                                                    :

在此数据帧中,我首先基于一些正则表达式从B列中提取ID。 B列的某些行可能包含该ID,B列的某些行可能不包含ID,B列的某些行可能包含空白。以下是代码-

df = pd.read_excel("Book1.xlsx", "Sheet1")
dict= {}
for i in df.index:
    j = str(df['B'][i])
    if(re.findall('_\d{25}', j)):
        a = re.findall('_\d{25}', j)
        print(a)
        dict[i] = a

正则表达式以_(下划线)和25位数字开头。上面df中的示例是_2020011618188744093744093,_2020011510749462801462801等。

现在,我想在特定行的D列中插入这些ID。例如,如果在第0行找到两个ID,则第一个ID应该插入D列的第0行,第二个ID应该插入D列的第一行,并且数据帧的所有内容都应向下移动。我想要的内容将从下面的输出中清除。基于上面的输入,我希望我的输出如下。

     A                B                                      ..                  D                                                         
0    foot     17/1: OGChan_2020011717711829281829281 ,7days     _2020011717711829281829281
1    arm      this will processed after                            
2    leg      go_2020011625692400374400374 16/1:                _2020011625692400374400374
              Id Imerys_2020011618188744093744093
3                                                               _2020011618188744093744093
4    head     xyziemen_2020011510691787006787006                _2020011510691787006787006
              en_2020011510749462801462801
5                                                               _2020011510749462801462801
:     :          :                                                    :

在上面的输出中,在第0行找到了1个ID,因此第0行的D列包含了该ID。在第一个索引中找不到ID。因此,第一个索引的D列为空。在第二个索引处,有两个ID。因此,第一ID位于D列的第二行,第二ID位于D列的第三行,并且将第三行的先前内容移至第四行。我希望上面的输出作为我的最终输出。

希望我很清楚。预先感谢

0 个答案:

没有答案