Python 按医院名称计算高于和低于给定值的权重和组数

Python 按医院名称计算高于和低于给定值的权重和组数,python,pandas,Python,Pandas,我需要一些小的帮助。我有包含医院名称和出生体重的数据,单位为千克。现在,我确实想对每个医院的体重进行分组和计数,体重在1kg以下和1kg以上。下面是我的数据的样子 # intialise data of lists. data = {'Hospital':['Ruack', 'Ruack', 'Pens', 'Rick','Pens', 'Rick'],'Birth_weight':['1.0', '0.1', '2.1', '0.9', '2.19', '0.88']} # Create

我需要一些小的帮助。我有包含医院名称和出生体重的数据,单位为千克。现在,我确实想对每个医院的体重进行分组和计数,体重在1kg以下和1kg以上。下面是我的数据的样子

# intialise data of lists. 
data = {'Hospital':['Ruack', 'Ruack', 'Pens', 'Rick','Pens', 'Rick'],'Birth_weight':['1.0', '0.1', '2.1', '0.9', '2.19', '0.88']} 

# Create DataFrame 
dfy = pd.DataFrame(data) 

# Print the output. 
print(dfy)
这是我试过的

#weight below 1kg
weight_count=pd.DataFrame(dfy.groupby('Hospital')['Birth_weight'] < 1.value_counts())
weight_count = weight_count.rename({'Birth_weight': 'weight_count'}, axis='columns')
weight_final = weight_count.reset_index()

#weight above 1kg
weight_count=pd.DataFrame(dfy.groupby('Hospital')['Birth_weight'] > 1.value_counts())
weight_count = weight_count.rename({'Birth_weight': 'weight_count'}, axis='columns')
weight_final = weight_count.reset_index()

#重量低于1kg
weight\u count=pd.DataFrame(dfy.groupby('Hospital')['Birth\u weight']<1.value\u counts())
weight\u count=weight\u count。重命名({'Birth\u weight':'weight\u count'},axis='columns')
重量\最终=重量\计数。重置\索引()
#重量超过1公斤
weight\u count=pd.DataFrame(dfy.groupby('Hospital')['Birth\u weight']>1.value\u counts())
weight\u count=weight\u count。重命名({'Birth\u weight':'weight\u count'},axis='columns')
重量\最终=重量\计数。重置\索引()
最终结果 预期结果是一个表,每个医院分组的出生体重在1kg以下和1kg以上

预期表格

# intialise data of lists. 
data = {'Hospital':['Ruack' , 'Rick','pens'],'< 1kg_count':['1', '2' , 'NAN'], '>1kg_count':['1','NAN' ,'2']} 

# Create DataFrame 
df_final = pd.DataFrame(data) 

# Print the output. 
print(df_final)
#初始化列表的数据。
数据={'Hospital':['Ruack','Rick','pens'],'1kg_计数':['1','2','NAN'],'>1kg_计数':['1','NAN','2']}
#创建数据帧
df_final=pd.DataFrame(数据)
#打印输出。
打印(df_最终版)

你在找这样的东西吗

a=(dfy['Birth_weight'].astype(float)<1).map({True: 'Less than 1kg', False: 'More than 1kg'})
dfy.groupby(['Hospital',a])['Birth_weight'].count().reset_index(name='Count')

你在找这样的东西吗

a=(dfy['Birth_weight'].astype(float)<1).map({True: 'Less than 1kg', False: 'More than 1kg'})
dfy.groupby(['Hospital',a])['Birth_weight'].count().reset_index(name='Count')
用于分类到新列,然后使用:

编辑:如果要对列进行装箱,请使用:

用于分类到新列,然后使用:

编辑:如果要对列进行装箱,请使用:

将熊猫作为pd导入
将numpy作为np导入
#对列表数据进行初始化。
数据={'Hospital':['Ruack','Ruack','Pens','Rick','Pens','Rick'],'Birth_weight':
['1.0', '0.1', '2.1', '0.9', '2.19', '0.88']} 
#创建数据帧
dfy=pd.DataFrame(数据)
dfy['Birth\u weight']=dfy['Birth\u weight'].aType(浮动)
df1=dfy.groupby([“医院”,“出生体重])
df1.过滤器(λx:x['Birth\u weight']>1)
df1.过滤器(lambda x:x['Birth\u weight']
作为pd导入熊猫
将numpy作为np导入
#对列表数据进行初始化。
数据={'Hospital':['Ruack','Ruack','Pens','Rick','Pens','Rick'],'Birth_weight':
['1.0', '0.1', '2.1', '0.9', '2.19', '0.88']} 
#创建数据帧
dfy=pd.DataFrame(数据)
dfy['Birth\u weight']=dfy['Birth\u weight'].aType(浮动)
df1=dfy.groupby([“医院”,“出生体重])
df1.过滤器(λx:x['Birth\u weight']>1)

df1.过滤器(λx:x['出生重量']您可以添加外观最终数据帧吗?值是否精确地
1.0
计数大于1kg或小于1kg?您可以添加外观最终数据帧吗?值是否精确地
1.0
计数大于1kg或小于1kg?我已经添加了预期的表输出,是否可以编辑此代码以适应该输出?似乎此解决方案仅适用于选择小于1,然后对其余部分进行分组,如果我想通过@LivingstoneM继续进一步切片-那么是否有必要使用我添加了预期的表输出,是否可以编辑此代码以适应该输出?似乎此解决方案只会选择小于1的部分,然后对其余部分进行分组,如果我想通过@LivingstoneM继续进一步切片,该怎么办-那么是否有必要使用我已经添加了预期的表输出,是否可以编辑此代码以适应该输出?我已经添加了预期的表输出,是否可以编辑此代码以适应该输出?#Lakshmana Perumal TypeError:filter函数返回了一个系列,但需要一个标量bool#Lakshmana Perumal TypeError:filter函数返回了一个S但应为标量布尔
#if encessary convert to floats
dfy['Birth_weight'] = dfy['Birth_weight'].astype(float)

dfy['group'] = np.where(dfy['Birth_weight'] < 1,'< 1kg_count','>1kg_count')
df = dfy.groupby(['Hospital', 'group']).size().unstack().reset_index()
print (df)
group Hospital  < 1kg_count  >1kg_count
0         Pens          NaN         2.0
1         Rick          2.0         NaN
2        Ruack          1.0         1.0
dfy['Birth_weight'] = dfy['Birth_weight'].astype(float)

g = np.where(dfy['Birth_weight'] < 1,'< 1kg_count','>1kg_count')
df = dfy.pivot_table(index='Hospital', columns=g, aggfunc='size').reset_index()
print (df)
  Hospital  < 1kg_count  >1kg_count
0     Pens          NaN         2.0
1     Rick          2.0         NaN
2    Ruack          1.0         1.0
dfy['Birth_weight'] = dfy['Birth_weight'].astype(float)

bins = np.arange(0, 5.5, 0.5)
labels = ['{}-{}kg_count'.format(i, j) for i, j in zip(bins[:-1], bins[1:])] 
#print (bins)
#print (labels)

g = pd.cut(dfy['Birth_weight'], bins=bins, labels=labels)
df = dfy.pivot_table(index='Hospital', columns=g, aggfunc='size')
print (df)
Birth_weight  0.0-0.5kg_count  0.5-1.0kg_count  2.0-2.5kg_count
Hospital                                                       
Pens                      NaN              NaN              2.0
Rick                      NaN              2.0              NaN
Ruack                     1.0              1.0              NaN
import pandas as pd
import numpy as np

# intialise data of lists. 
data = {'Hospital':['Ruack', 'Ruack', 'Pens', 'Rick','Pens', 'Rick'],'Birth_weight': 
                   ['1.0', '0.1', '2.1', '0.9', '2.19', '0.88']} 

# Create DataFrame

dfy = pd.DataFrame(data) 
dfy['Birth_weight'] = dfy['Birth_weight'].astype(float)
df1 = dfy.groupby(['Hospital','Birth_weight'])
df1.filter(lambda x: x['Birth_weight']>1)
df1.filter(lambda x: x['Birth_weight']<1)