在pandas数据透视表中,如何为数据子集定义函数



我正在使用类似于以下的数据帧:

>国家拿大//tr>拿大//tr>/td>//tr>/td>//tr>拿大Steve拿大//tr>/td>//tr>拿大//tr>Pete
名称 公制1 米制2
John 0.10 5.00
Jane 0.50
Jack 2.00加拿大
Polly 0.30加拿大
Mike
Lily 0.15 1.20
Kate 3.00加拿大
Edward 0.05

似乎有空字符串""而不是数字。你可以试试:

def metricgreaterthanone(x):
n = pd.to_numeric(x, errors="coerce")
return (n > 1).sum() / n.notna().sum()

x = pd.pivot_table(
df,
index=["Country"],
values=["Name", "Metric 1", "Metric 2"],
aggfunc={
"Name": pd.Series.nunique,
"Metric 1": metricgreaterthanone,
"Metric 2": metricgreaterthanone,
},
)
print(x)

打印:

Metric 1  Metric 2  Name
Country                          
Canada       0.25  0.666667    10

x!=0返回一个布尔数组,因此len()不计算Trues的数量。

尝试


def metricgreaterthanone(x):
return (x>1).sum()/(x!=0).sum()

最新更新