【发布时间】:2020-01-04 17:09:38
【问题描述】:
我有按预期工作的示例 sn-p:
import pandas as pd
df = pd.DataFrame(data={'label': ['a', 'b', 'b', 'c'], 'wave': [1, 2, 3, 4], 'y': [0,0,0,0]})
df['new'] = df.groupby(['label'])[['wave']].transform(tuple)
结果是:
label wave y new
0 a 1 0 (1,)
1 b 2 0 (2, 3)
2 b 3 0 (2, 3)
3 c 4 0 (4,)
如果我在转换中而不是 tuple 而不是 set, frozenset, dict,它的工作原理类似,但如果我给出 list,我会得到完全出乎意料的结果:
df['new'] = df.groupby(['label'])[['wave']].transform(list)
label wave y new
0 a 1 0 1
1 b 2 0 2
2 b 3 0 3
3 c 4 0 4
有一种解决方法可以获得预期的结果:
df['new'] = df.groupby(['label'])[['wave']].transform(tuple)['wave'].apply(list)
label wave y new
0 a 1 0 [1]
1 b 2 0 [2, 3]
2 b 3 0 [2, 3]
3 c 4 0 [4]
我考虑了可变性/不变性(列表/元组),但对于 set/frozenset,它是一致的。
问题是为什么它会以这种方式工作?
【问题讨论】:
标签: python pandas transform pandas-groupby