我在数据框中有两列。一个是名字,另一个是 Pos。
我想通过在 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.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
答案 0 :(得分:0)
您可以通过检查 POS 列中 B-PER 的相等性并在布尔掩码上运行 cumsum 来创建伪列。稍后对这个新列进行分组并进行所需的聚合。
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
根据评论(不清楚),
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