基于第二列熊猫合并一列中的行

时间:2021-03-01 04:17:00

标签: python pandas

我在数据框中有两列。一个是名字,另一个是 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

1 个答案:

答案 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