Pandas 对子字符串或正则表达式进行分组

标签 pandas python-2.7 dataframe pandas-groupby

给定一个 pandas 数据框。 我如何在“a”列上进行分组,以便将所有以相同字符串开头的行分组在一起。比较部分的末尾是_。 (所以这里 y_s1 和 y_s2 被分组在一起,但不是 x_s1)

这是一个最小的例子:

raw_data = {'a': ['y_s2', 'y_s1', 'x_s1'], 'b': [1,2,3]}
df = pd.DataFrame(raw_data, columns = ['a', 'b'])

最佳答案

类似这样的事情:

grp = df.groupby(df['a'].str[:2])  ## groups on first 2-letters of column `a`

您可以对此分组进行计数,并检查以x_ 开头的行是否分组在一起以及以y_ 开头的行分组在一起.

In [1545]: df.groupby(df.a.str[:2]).count()                                                                                                                                                                 
Out[1545]: 
    a  b
a       
x_  1  1
y_  2  2

OP发表评论后,采用了更通用的方法:

## Split the string on `_` and create 2 separate columns

In [1572]: df['a1'], df['a2'] = df['a'].str.split('_', 1).str 
In [1573]: df                                                                                                                                                                                               
Out[1573]: 
      a  b a1  a2
0  y_s2  1  y  s2
1  y_s1  2  y  s1
2  x_s1  3  x  s1


## Groupby on `a1`(the part before `_`)

In [1577]: df.groupby('a1').count().drop('a2', 1)                                                                                                                                                           
Out[1577]: 
    a  b
a1      
x   1  1
y   2  2

另一种没有复杂正则表达式的方法;

In [1601]: df.groupby(df['a'].str.split('_').str[0]).count()                                                                                                                                                
Out[1601]: 
   a  b
a      
x  1  1
y  2  2

关于Pandas 对子字符串或正则表达式进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61601350/

相关文章:

python - 如何合并 Pandas 中的两个数据框以替换nan

python - Pandas - 按组成员编号排序

python脚本按行连接值并删除相同的值

r - 如何从数据框中创建矩阵?

r - 数据框 : create column by applying a function to groups of rows

python - 通过浏览网页中的不同选项卡并将数据获取到 Dataframe 来进行网页抓取

python-2.7 - 查找一列中 “mean positioned”白色像素并为每列重复该过程的算法

python - 如何使用pygal在一个图表中绘制多个图表?

python - pandas.DataFrame 中重复列的有趣结果

python - 最后一行的 Pandas 是否满足特定条件?