代码之家  ›  专栏  ›  技术社区  ›  Shinilrk

遍历pandas数据帧中的行,并更新列条件检查

  •  0
  • Shinilrk  · 技术社区  · 4 年前
    行_编号 A栏 B栏
    1. 数据1 A.
    2. 数据A
    3. 数据B
    4. 数据2 B
    5. 数据C
    6. 数据D
    7. 数据E
    8. 数据3 C

    这就是我在另一个表的数据帧上更新数据的方式,在这个“数据1”中,有一个连续的“数据a”和“数据B”,只有一个数据在列B上为“a”,但在数据帧中,所有的“数据1“、”数据a“、”数据B“都是在单独的行中创建的。 是否有任何操作可以将所有“Row_number”1,2,3连接在一行上,并且在列B中只有值“a”?

    预期产量如下:

    行_编号 A栏 B栏
    1. 数据1、数据A、数据B A.
    2. 数据2、数据C、数据D、数据E B
    3. 数据3 C

    提前感谢

    我是python新手,已经尝试了以下代码

    # variable that stores the values: table_values
    import pandas as pd
    
    df=pd.DataFrame(table_values,columns=['ColumnA','ColumnB'])
    
    for index, row in df.iterrows():
      if df.loc[index,'ColumnB'] == '' & df.loc[index,'ColumnA'] != '':
        df.loc[index-1, 'ColumnA'] = df.loc[index-1, 'ColumnA'] + df.loc[index, 'ColumnA']  
    print(df)'''
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   Tom    4 年前

    你可以做一个 groupby 在这里。最简单的方法就是直接使用 Column B ,因为这已经对应于您要分组的行。鉴于这些数据:

    import pandas as pd
    
    df = pd.DataFrame({'ColumnA': ['Data1', 'DataA', 'DataB',
                                   'Data2', 'DataC', 'DataD', 'DataE',
                                   'Data3'],
                       'ColumnB': ['A', None, None,
                                   'B', None, None, None,
                                   'C']})
    
    #  ColumnA ColumnB
    # 0   Data1       A
    # 1   DataA    None
    # 2   DataB    None
    # 3   Data2       B
    # 4   DataC    None
    # 5   DataD    None
    # 6   DataE    None
    # 7   Data3       C
    

    通过填写缺失的值来创建要分组的内容:

    grouper = df['ColumnB'].ffill()
    
    # 0    A
    # 1    A
    # 2    A
    # 3    B
    # 4    B
    # 5    B
    # 6    B
    # 7    C
    # Name: ColumnB, dtype: object
    

    然后聚合为concat字符串,如下所示 this post :

    output = df['ColumnA'].groupby(grouper).apply(lambda x : ', '.join(x)).reset_index()
    

    最终结果:

      ColumnB                     ColumnA
    0       A         Data1, DataA, DataB
    1       B  Data2, DataC, DataD, DataE
    2       C                       Data3