【发布时间】:2016-09-23 15:41:53
【问题描述】:
这个DataFrame有两列,都是对象类型。
Dependents Married
0 0 No
1 1 Yes
2 0 Yes
3 0 Yes
4 0 No
我想根据“已婚”汇总“家属”。
table = df.pivot_table(
values='Dependents',
index='Married',
aggfunc = lambda x: x.map({'0':0,'1':1,'2':2,'3':3}).mean())
这行得通,但令人惊讶的是,以下行不通:
table = df.pivot_table(values = 'Dependents',
index = 'Married',
aggfunc = lambda x: x.map(int).mean())
它将生成一个None。
谁能帮忙解释一下?
【问题讨论】:
-
看起来你在第二组中缺少一组括号。另外,为什么不直接使用 aggfunc=int?
-
在导入或预处理时,您是否有理由不将整个内容转换为整数?
df = pd.read_csv('bleh.csv').assign( Dependents = lambda d: d.Dependents.astype("int"))或任何类似的方法? -
@Sohier Dane。我不相信 () 在 lambda 函数周围被遗漏。我试图将一个 pd 系列映射为 str 到 int 然后得到它的平均值。我需要知道已婚与单身的平均受抚养人。
-
@xysmas。是的。转换为 int 会更简单。但是数据不干净,“Dependents”列有“3+”、“3+”和“NaN”等值,在转换之前需要一些预处理。实际上,现在我认为第一种方法看起来很麻烦,但是对于处理除 '1'、'2'、'3' 和 '0' 之外的意外值来说是健壮的。
-
@user2951327 FWIW,我认为如果数据是脏的,那么在枢轴的
aggfunc内清理它是最不直接的方法之一。为什么不先清理它,然后做支点?更容易看到正在发生的事情,并且还允许您执行除旋转之外的其他操作。
标签: python pandas pivot-table