Python 带过滤器的聚合数据帧
熊猫是否可以使用“namedagh”方法进行过滤 下面是我的示例代码:Python 带过滤器的聚合数据帧,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,熊猫是否可以使用“namedagh”方法进行过滤 下面是我的示例代码: df = pd.DataFrame({'Person': ['John','Paul','John','Paul','Taylor'], 'animal': ['cat', 'dog', 'cat', 'dog','dog'], 'from' : ['breeder','adoption','adoption','breeder','wild'],
df = pd.DataFrame({'Person': ['John','Paul','John','Paul','Taylor'],
'animal': ['cat', 'dog', 'cat', 'dog','dog'],
'from' : ['breeder','adoption','adoption','breeder','wild'],
'height': [9.1, 6.0, 9.5, 34.0,55],
'weight': [7.9, 7.5, 9.9, 198.0,200]})
df.groupby(['Person']).agg(
number_of_animal = pd.NamedAgg(column = 'animal', aggfunc = 'count'),
number_of_from = pd.NamedAgg(column = 'from', aggfunc = 'count'),
total_height = pd.NamedAgg(column = 'height', aggfunc = 'sum'),
total_weight = pd.NamedAgg(column = 'weight', aggfunc = 'sum')
)
result = pd.DataFrame({'Person': ['John','Paul','Taylor'],
'number_of_animal':[2,0,0],
'number_of_from': [1,1,0],
'total_height':[0,34,55],
'total_weight':[17.8,205.5,200]})
对于每个单独的列,我想应用一个过滤器,例如,我想过滤其中的“动物的数量”df['animal']=='cat'
和“总高度”df['height']>10
和来自df['from']='breader用于将替换的非匹配值重新分配到NaN
s中:
有关过滤原始数据帧的方法,请参阅。然后,您可以在过滤后的数据帧上应用group by指令。@itprorh66这将只过滤数据帧,我想在每个系列上应用过滤器,然后再将其聚合为1个数据帧。请查看您期望的output@sammywemmy嘿,我发布了我的预期输出
df1 = (df.assign(animal = df['animal'].where(df['animal'] == 'cat'),
height = df['height'].where(df['height'] > 10),
from1 = df['from'].where(df['from'] == 'breeder')
)
.groupby(['Person']).agg(
number_of_animal = pd.NamedAgg(column = 'animal', aggfunc = 'count'),
number_of_from = pd.NamedAgg(column = 'from1', aggfunc = 'count'),
total_height = pd.NamedAgg(column = 'height', aggfunc = 'sum'),
total_weight = pd.NamedAgg(column = 'weight', aggfunc = 'sum')
))
print (df1)
number_of_animal number_of_from total_height total_weight
Person
John 2 1 0.0 17.8
Paul 0 1 34.0 205.5
Taylor 0 0 55.0 200.0