python - Pandas group by 返回 NAN 进行应用 vs 变换函数

标签 python pandas numpy dataframe pandas-groupby

我遇到了一些我自己无法解释的情况。首先是关于应用函数与变换函数。到目前为止,我了解到,应用适用于整个数据帧,而转换适用于每一行,因此比应用慢。这是我的数据框,

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

我想让它与 apply 一起工作,因为我有 300 万行,速度是重要因素。

第二期

当我的尺寸数据有空单元格时,即

size    id
        2479
41/7    2479
        2479
43/9    2479
44/10   2479
45/11   2479
46/12   2479

使用应用或转换,我收到此错误, 类型错误:序列项 0:预期字符串,找到 float 我理解这是因为空值。我的问题是,我该如何克服这个问题?我需要可用值的并集并忽略 null。

最佳答案

我认为你需要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')

关于python - Pandas group by 返回 NAN 进行应用 vs 变换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47810051/

相关文章:

python - pandas 打印 `tput: unknown terminal "emacs"`

python - Matlab到Python的转换: Read a text file into numpy records and search array for a string

python - pycharm 中的“预期语句结束”

python - Numpy:具有不同值的索引样本组

Python 字符串递归,字符串索引超出范围

python - 如何使用负值保存 PIL 图像

python - 马赫制表符或行首 8 个空格

python - 对 Pandas DataFrame 进行切片以显示特定日期的所有记录

python - 使用带有 groupby 和 group-specific bins 的 pandas cut 函数

python 3 pip 安装非 ASCII 负载错误