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下的数字计数5下的数字\u
-最低值最低值
-最高值最高值
| 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()