【发布时间】:2020-06-30 13:38:07
【问题描述】:
我对以下代码的行为很感兴趣:
import pandas as pd
df = pd.DataFrame({'Name':['A','A','B','B','B'],
'Date':['2020-01-01','2020-01-02','2020-01-01','2020-01-02','2020-01-03']})
df['Date'] = pd.to_datetime(df['Date'],infer_datetime_format=True)
df['Data_Points'] = df.groupby(['Name'])['Date'].transform('nunique')
print(df)
哪些输出:
Name Date Data_Points
0 A 2020-01-01 1970-01-01 00:00:00.000000002
1 A 2020-01-02 1970-01-01 00:00:00.000000002
2 B 2020-01-01 1970-01-01 00:00:00.000000003
3 B 2020-01-02 1970-01-01 00:00:00.000000003
4 B 2020-01-03 1970-01-01 00:00:00.000000003
如果pandas.Series.nunique 的文档明确指出,为什么我在使用transform('nunique') 后会得到一个日期时间值:
返回对象中唯一元素的数量。
返回: 诠释
而pandas.DataFrame.transform 没有提到任何关于保留聚合列的 dtype 的内容,只是:
在自身上调用 func 生成具有转换值的 DataFrame。 生成的 DataFrame 将具有与自身相同的轴长度。
因此,当结合这两个功能时,为什么我得到一个datetime 而不是nunique() 所说的int?在定义转换列的dtype 时,聚合的dtype 是否优先于transform() 方法中传递的函数?这是预期的行为吗?
【问题讨论】: