Pandas - 使用变换对组进行操作

时间:2016-10-14 18:25:54

标签: python pandas transform

以下是我的例子:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A A': ['one', 'one', 'two', 'two', 'one'] ,
                   'B': ['Ar', 'Br', 'Cr', 'Ar','Ar'] ,
                   'C': ['12/15/2011', '11/11/2001', '08/30/2015', '07/3/1999','03/03/2000' ],
                      'D':[1,7,3,4,5]})

df['C'] = pd.to_datetime(df['C'])

def date_test(x):
    key_date = pd.Timestamp(np.datetime64('2015-08-13'))
    end_date = pd.Timestamp(np.datetime64('2016-10-10'))
    result = False

    for i in x.index:
        if key_date < x[i] < end_date:
            result = True

    return result

def int_test(x):
    result = False
    for i in x.index:
        if 1 < x[i] < 9:
            result = True

    return result

现在,我按列B进行分组,并转换列CD

以下代码产品列的一个。

df.groupby(['B'])['D'].transform(int_test)

以下代码生成日期列

df.groupby(['B'])['C'].transform(date_test)

我希望他们都能产生1和0的集合,而不是日期。我的目标是获得1和0的集合。有什么想法吗?

更新:我的主要目标是了解transform的工作原理。

1 个答案:

答案 0 :(得分:2)

对于后续操作的类型一致性,您可以使用transform调用的结果,该函数尝试将生成的Series转换为其所使用的所选数据的dtype。函数源代码已明确完成此dtype转换。

您的布尔数据可以转换为日期,因此您可以获得日期时间序列。明确地转换为int以获得预期类型:

df.groupby(['B'])['C'].transform(date_test).astype('int64')