[英]Aggregate Over Multiple Columns with Multiple Data Types in Pandas
我有一个数据框,使得前 n 列中的变量在例如 2 行中是相同的,我想聚合浮点类型的重命名列。 这是一个例子:
import pandas as pd
import numpy as np
data=[[1,2,np.nan,'string', 100, 200],[1,2,np.nan,'string',102,202],[1,2,5,0.5,1000,2000],[1,2,5,0.5,1002,2002]]
pd.DataFrame(data=data,columns=['Var1','Var2','Var3','Var4','Var5','Var6'])
Var1 Var2 Var3 Var4 Var5 Var6
0 1 2 NaN string 100 200
1 1 2 NaN string 102 202
2 1 2 5.0 0.5 1000 2000
3 1 2 5.0 0.5 1002 2002
所以在这个数据框中,我想在每 2 行中找到Var5
和Var6
的平均值。 预期的 output 如下:
Var1 Var2 Var3 Var4 Var5 Var6
0 1 2 NaN string 101 201
1 1 2 5.0 0.5 1001 2001
鉴于相同特征的数据类型不一致,有没有办法做到这一点? 例如, Var3
可以是nan
和 float。
你可以试试:
dc=dict(zip(df.columns,np.where(df.dtypes!='object','mean','first')))
df.groupby(df.index//2).agg(dc)
Output:
Var1 Var2 Var3 Var4 Var5 Var6
0 1 2 NaN string 101 201
1 1 2 5.0 0.5 1001 2001
详情:
要获取具有功能的字典:
当列具有混合类型的值或值的所有类型都是字符串时,该列的dtype
为object
,因此您可以屏蔽列以获取“非dtype-object”列,并使用np.where
将 function 的mean
放在与 object 不同的列中, first
放在其他列中:
df.dtypes
#Var1 int64
#Var2 int64
#Var3 float64
#Var4 object
#Var5 int64
#Var6 int64
dtype: object
np.where(df.dtypes!='object','mean','first')
#['mean' 'mean' 'mean' 'first' 'mean' 'mean']
dc=dict(zip(df.columns,np.where(df.dtypes!='object','mean','first')))
dc
#{'Var1': 'mean', 'Var2': 'mean', 'Var3': 'mean', 'Var4': 'first', 'Var5': 'mean', 'Var6': 'mean'}
按两行分组:
您可以使用带有参数df.index//2
的groupby
将 dataframe 每两行切片,然后将agg
与之前创建的字典一起使用
df.index//2
#Int64Index([0, 0, 1, 1], dtype='int64')
df.groupby(df.index//2).agg(dc)
Pandas 1.1 支持 groupby 索引中的 Null 值:
columns = df.columns[:4].tolist()
df.groupby(columns, dropna=False, sort=False).agg("mean")
Var5 Var6
Var1 Var2 Var3 Var4
1 2 NaN string 101 201
5.0 0.5 1001 2001
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.