Python 使用函数和下一列中的数据计算一列的行数

Python 使用函数和下一列中的数据计算一列的行数,python,pandas,Python,Pandas,我有一个数据框,它有两列col1和col2col1有字母(A和B),col2有数字(1到9)。对于输出,我需要带有两个字母的col1,以及一些新列: 总数-每个字母中的总数 5下的数字\u-5下的数字计数 最低值-最低值 最高值-最高值 输入: | Col1 | Col2| |----|----| |A | 1| |B | 1| |A | 2| |A | 7| |B | 6| 输出: | Col1 |总数|数字| 5 |最低|最高| |----|-------------|--------

我有一个数据框,它有两列
col1
col2
col1
有字母(A和B),
col2
有数字(1到9)。对于输出,我需要带有两个字母的
col1
,以及一些新列:

  • 总数
    -每个字母中的总数
  • 5下的数字\u
    -5下的数字计数
  • 最低值
    -最低值
  • 最高值
    -最高值
输入:

| Col1 | Col2|
|----|----|
|A | 1|
|B | 1|
|A | 2|
|A | 7|
|B | 6|
输出:

| Col1 |总数|数字| 5 |最低|最高|
|----|-------------|---------------|------|-------|
|A | 3 | 2 | 1 | 7|
|B | 2 | 1 | 1 | 6|

由于我们需要一个自定义函数,用于小于5的
数字,因此我们必须将
groupby
拆分为两个dfs(df1和df2),然后在
Col1
上合并,最后根据需要重命名列

df1 = df[df.groupby('Col1').Col2.apply(lambda x: x<5)].groupby('Col1').agg('last').reset_index()
df2 = df.groupby('Col1', as_index=False).Col2.agg(['count', 'min','max']).reset_index()
df = df1.merge(df2, on='Col1').rename(columns= {
    'Col2':'numbers_under_5',
    'count':'total_numbers',
    'min':'lowest',
    'max':'highest'
})
df
PS对于
A
Col1
中,有2个值小于5,因为在您显示的输出中
2
因此我取了最后一个值。如果希望
最大值低于5,而不是
最后一个值
,则可以使用下面的代码来表示每个组有多个小于5的值

df1 = df[df.groupby('Col1').Col2.apply(lambda x: x<5)].groupby('Col1').agg('max').reset_index()
df1=df[df.groupby('Col1').Col2.apply(lambda x:xTRY:

df1=df.groupby('Col1').Col2.agg(['count','min','max',lambda x:len(x[x.astype(int)<5]))
df1.columns=[“总数”、“最低”、“最高”、“第5项下的数字”]
df1=df1.reset_index()
df1 = df[df.groupby('Col1').Col2.apply(lambda x: x<5)].groupby('Col1').agg('max').reset_index()
df1 = df.groupby('Col1').Col2.agg(['count', 'min','max', lambda x : len(x[x.astype(int) < 5])])
df1.columns = ['total_numbers', 'lowest' ,'highest' , 'numbers_under_5'] 
df1 = df1.reset_index()