繁体   English   中英

遍历 pandas dataframe 中的行并更新对列条件的检查

[英]Loop through rows in pandas dataframe and update check on the column condition

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

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

预期的 output 如下:

行号 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)'''

你可以在这里做一个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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM