我不明白为什么apply并transform在同一数据帧上调用时返回不同的dtypes.我之前解释这两个函数的方式是" apply折叠数据,transform完全相同apply但保留原始索引并且不会崩溃".考虑以下.
df = pd.DataFrame({'id': [1,1,1,2,2,2,2,3,3,4],
'cat': [1,1,0,0,1,0,0,0,0,1]})
Run Code Online (Sandbox Code Playgroud)
让我们识别那些id在cat列中具有非零条目的s .
>>> df.groupby('id')['cat'].apply(lambda x: (x == 1).any())
id
1 True
2 True
3 False
4 True
Name: cat, dtype: bool
Run Code Online (Sandbox Code Playgroud)
大.但是,如果我们想创建一个指标列,我们可以执行以下操作.
>>> df.groupby('id')['cat'].transform(lambda x: (x == 1).any())
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 0
8 0
9 1
Name: cat, dtype: int64
Run Code Online (Sandbox Code Playgroud)
我不明白为什么dtype现在int64而不是any()函数返回的布尔值.
当我将原始数据框更改为包含一些布尔值时(注意零保持不变),转换方法会在object …