如何基于数据中多个分隔符的值在数据帧中创建组?

2024-10-01 02:18:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,如下所示:

data = {
    'Name': ['AVY', 'SCOT', 'JYN', 'MAZ', 'SAS', 'LEN', 'PAUL'],
    'Value': ['A/A', 'A|G', 'GG|GG', 'G/GGGG', 'G|GG', 'AA/AA', 'TTT|TTT']
}
df = pd.DataFrame(data)

df

    Name    Value
0   AVY     A/A
1   SCOT    A|G
2   JYN     GG|GG
3   MAZ     G/GGGG
4   SAS     G|GG
5   LEN     AA/AA
6   PAUL    TTT|TTT

我想通过使用多个分隔符拆分df['Value']来添加一个新列。分隔符是/|。如果分割的值相等,则将其分组为G1G2。预期产出如下:

    Name    Value   Group
0   AVY     A/A      G1
1   SCOT    A|G      G2
2   JYN     GG|GG    G1
3   MAZ     G/GGGG   G2
4   SAS     G|GG     G2
5   LEN     AA/AA    G1
6   PAUL    TTT|TTT  G1

我试过:

df['Group'] = df.Value.apply(lambda col:'G1' if col.find('/')!=-1 else 'G2')

Tags: namedflenvalueaasasggg1
3条回答

您还可以使用axis=1上的^{}来获取分割后的unqiue值的数量,如下所示:

df['Group'] = np.where(df['Value'].str.split(r'/|\|', expand=True).nunique(axis=1).eq(1), 'G1', 'G2')

结果:

print(df)

   Name    Value Group
0   AVY      A/A    G1
1  SCOT      A|G    G2
2   JYN    GG|GG    G1
3   MAZ   G/GGGG    G2
4   SAS     G|GG    G2
5   LEN    AA/AA    G1
6  PAUL  TTT|TTT    G1

让我们试试列表理解:

df['Group']=['G1' if x==y else 'G2' for x,y in df['Value'].str.split(r'[|/]',n=1)]

尝试:

df["Group"] = np.where(
    df["Value"].str.split(r"/|\|").apply(set).str.len() == 1, "G1", "G2"
)
print(df)

印刷品:

   Name    Value Group
0   AVY      A/A    G1
1  SCOT      A|G    G2
2   JYN    GG|GG    G1
3   MAZ   G/GGGG    G2
4   SAS     G|GG    G2
5   LEN    AA/AA    G1
6  PAUL  TTT|TTT    G1

相关问题 更多 >