regex 如何根据具有字符串值的列对 Dataframe 进行分组?

moiiocjp  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(93)

我在使用groupby根据字符串中的数值对df进行分组时遇到了一些问题。正则表达式(\w+)_\w+应该匹配字符串中的数字,我希望用它来组成一个组,但是我不确定如何用groupby实现这一点。
任何帮助都将不胜感激。
数据:

import pandas as pd

df = pd.DataFrame({'x':['ab_c_1.0','ab_c_1.1','ab_c_12.0','ab_c_12.1','ab_c_123.0','ab_c_123.1']})

所需分组:

x
0     ab_c_1.0
1     ab_c_1.1

2    ab_c_12.0
3    ab_c_12.1

4   ab_c_123.0
5   ab_c_123.1
ua4mk5z4

ua4mk5z41#

其中一个选项是extract,然后三个部分请求它们的ngroup

grp = df["x"].str.extract(r"(\D+)_(\d+)\.(\d+)").groupby([0,1]).ngroup().add(1)

#[1, 1, 2, 2, 3, 3]

splitduplicatedcumsum的另一个变体:

grp = (~df["x"].str.split(".").str[0].duplicated()).cumsum()

#[1, 1, 2, 2, 3, 3]

如果需要将组编号分配给单独的/新的列,请使用df["group"] = grp
输出:

for _, g in df.groupby(grp):
    print(g)
          x
0  ab_c_1.0
1  ab_c_1.1
           x
2  ab_c_12.0
3  ab_c_12.1
            x
4  ab_c_123.0
5  ab_c_123.1
yftpprvb

yftpprvb2#

可以使用.str.split()

for _, g in df.groupby(df['x'].str.split('.').str[0]):
    print(g)
    print()

图纸:

x
0  ab_c_1.0
1  ab_c_1.1

           x
2  ab_c_12.0
3  ab_c_12.1

            x
4  ab_c_123.0
5  ab_c_123.1

相关问题