首页 > 解决方案 > 循环遍历 pandas 数据框中的行并更新列条件检查

问题描述

行号 A列 B栏
1 数据 1 一个
2 数据A
3 资料 B
4 数据 2
5 数据 C
6 资料 D
7 数据 E
8 数据 3 C

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

预期输出如下:

行号 A列 B栏
1 数据1,数据A,数据B 一个
2 数据2,数据C,数据D,数据E
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)'''

标签: pythonpython-3.xpandasdataframeautomationanywhere

解决方案


你可以在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

然后按照这篇文章聚合到连接字符串:

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

推荐阅读