[英]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.