我陷入了几种我无法解释的情况。首先是应用vs变换函数。到目前为止,我理解的是,对整个数据帧应用工作,而转换在每一行上工作,因此比应用要慢。这是我的数据
size id
40/6 2479
41/7 2479
42/8 2479
43/9 2479
44/10 2479
45/11 2479
46/12 2479现在,当我应用df.groupby('id')['size'].apply(lambda col: ', '.join(col))时,它会返回
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN但是如果我改变了,df.groupby('id')['size'].transform(lambda col: ', '.join(col)),我得到
0 40/6, 41/7, 42/8, 43/9, 44/10, 45/11, 46/12
1 40/6, 41/7, 42/8, 43/9, 44/10, 45/11, 46/12
2 40/6, 41/7, 42/8, 43/9, 44/10, 45/11, 46/12
3 40/6, 41/7, 42/8, 43/9, 44/10, 45/11, 46/12
4 40/6, 41/7, 42/8, 43/9, 44/10, 45/11, 46/12
5 40/6, 41/7, 42/8, 43/9, 44/10, 45/11, 46/12
6 40/6, 41/7, 42/8, 43/9, 44/10, 45/11, 46/12我想让它与应用程序工作,因为我有300万行和速度是重要的因素。
第二期
当我的大小数据有空单元格时,即
size id
2479
41/7 2479
2479
43/9 2479
44/10 2479
45/11 2479
46/12 2479使用apply或transform,我会得到这个错误,TypeError: sequence item 0: expected string, float found我理解它是由于null值造成的。我的问题是,我怎样才能克服这个问题?我需要可用值的联合,忽略null。
发布于 2017-12-14 09:37:55
我认为您需要dropna和apply,lambda应该省略:
df=df.dropna(subset=['size']).groupby('id')['size'].apply(', '.join).reset_index(name='col')或者非常相似:
df = df['size'].dropna().groupby(df['id']).apply(', '.join).reset_index(name='col')https://stackoverflow.com/questions/47810051
复制相似问题