Python 基于第二列合并一列中的行
我在dataframe中有两列。一个是名字,另一个是位置 我想通过在Pos列上应用循环来修改这个数据帧。从B-PER值开始,将名称列中的名称连接起来,直到Pos列中的值再次变为B-PER,然后重复Python 基于第二列合并一列中的行,python,pandas,Python,Pandas,我在dataframe中有两列。一个是名字,另一个是位置 我想通过在Pos列上应用循环来修改这个数据帧。从B-PER值开始,将名称列中的名称连接起来,直到Pos列中的值再次变为B-PER,然后重复 df = pd.DataFrame() df['names'] = ['John', 'Smith', 'Adam', 'Marry', 'Leo', 'Lauana'] df['POS'] = ['B-PER', 'I-PER', 'I-PER', 'B-PER', 'I-PER', 'B-PH'
df = pd.DataFrame()
df['names'] = ['John', 'Smith', 'Adam', 'Marry', 'Leo', 'Lauana']
df['POS'] = ['B-PER', 'I-PER', 'I-PER', 'B-PER', 'I-PER', 'B-PH']
df.groupby(df['POS'].eq('B-PER').cumsum()).agg({'names': '+'.join, 'POS': '+'.join})
names POS
1 John+Smith+Adam B-PER+I-PER+I-PER
2 Marry+Leo B-PER+I-PER
3 Lauana B-PH
您可以通过检查POS列中B-PER的相等性并在布尔掩码上运行求和来创建伪列。稍后,groupby将覆盖此新列并执行所需的聚合
df = pd.DataFrame()
df['names'] = ['John', 'Smith', 'Adam', 'Marry', 'Leo']
df['POS'] = ['B-PER', 'I-PER', 'I-PER', 'B-PER', 'I-PER']
df.groupby(df['POS'].eq("B-PER").cumsum()).agg({'names': '+'.join, 'POS': '+'.join})
names POS
POS
1 John+Smith+Adam B-PER+I-PER+I-PER
2 Marry+Leo B-PER+I-PER
根据评论(不清楚)
实际上,我忘了在dataframe中提到一件事,即Pos列中除了B-PER和i-PER之外还有一个值,即B-PH,这一行不应与其他行合并。如何可能的名字POS 1 John+Smith+Adam B-PER+I-PER+I-PER 2 Marry+Leo B-PER+I-PER 3 Lauana B-PH我将如何获得此输出?请更新您的Q。将数据框添加为文本而不是图像。答案非常有效。谢谢你,伙计
df = pd.DataFrame()
df['names'] = ['John', 'Smith', 'Adam', 'Marry', 'Leo', "Launa"]
df['POS'] = ['B-PER', 'I-PER', 'I-PER', 'B-PER', 'I-PER', "B-PH"]
df.groupby((df['POS'].eq("B-PER") | df['POS'].eq("B-PH")).cumsum(), as_index=False).agg({'names': '+'.join, 'POS': '+'.join})
names POS
0 John+Smith+Adam B-PER+I-PER+I-PER
1 Marry+Leo B-PER+I-PER
2 Launa B-PH