Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 熊猫根据不同的时间窗口计算特征_Python 2.7_Pandas - Fatal编程技术网

Python 2.7 熊猫根据不同的时间窗口计算特征

Python 2.7 熊猫根据不同的时间窗口计算特征,python-2.7,pandas,Python 2.7,Pandas,例如,我有以下数据框: TXN_ID TXN_DATE TXN_TYPE 8C083F30C0674A72 01/01/2013 00:00 A B610D7D4E2D14513 01/01/2013 00:00 B 698C5DD423AC42D6 02/01/2013 00:00 C 37E2B21583F949CA 12/01/2013 00:00 A 9FE25A547F964E93 13/0

例如,我有以下数据框:

TXN_ID                 TXN_DATE      TXN_TYPE
8C083F30C0674A72    01/01/2013 00:00    A
B610D7D4E2D14513    01/01/2013 00:00    B
698C5DD423AC42D6    02/01/2013 00:00    C
37E2B21583F949CA    12/01/2013 00:00    A
9FE25A547F964E93    13/01/2013 00:00    B
F6C14D987D584E53    14/01/2013 00:00    A
对于每一行,我想添加3个特性—统计同一天、过去3天和过去一周内不同的TXN_类型。 因此,数据帧看起来像:

TXN_ID                TXN_DATE      TXN_TYPE Distinct_Type_1Day   Distinct_Type_3Day    Distinct_Type_7Day
8C083F30C0674A72    01/01/2013 00:00    A           2                  2                 2
B610D7D4E2D14513    01/01/2013 00:00    B           2                  2                 2
698C5DD423AC42D6    02/01/2013 00:00    C           1                  3                 3
37E2B21583F949CA    12/01/2013 00:00    A           1                  1                 1
9FE25A547F964E93    13/01/2013 00:00    B           1                  2                 2
F6C14D987D584E53    14/01/2013 00:00    A           1                  2                 2

这样做的最佳和有效方式是什么?

这样可以完成工作,但我不喜欢使用
apply

def comp_dates(x):
    d = 'TXN_DATE'
    date = x[d]
    d1 = date - pd.offsets.Day(1)
    d3 = date - pd.offsets.Day(3)
    d7 = date - pd.offsets.Day(7)
    cond0 = df[d] <= date
    cond1 = df[d] > d1
    cond3 = df[d] > d3
    cond7 = df[d] > d7
    s = pd.Series([
            len(df[cond0 & cond1].TXN_TYPE.unique()),
            len(df[cond0 & cond3].TXN_TYPE.unique()),
            len(df[cond0 & cond7].TXN_TYPE.unique()),
        ], ['Distinct_Type_1Day', 'Distinct_Type_3Day', 'Distinct_Type_7Day'])
    return s

pd.concat([df, df.apply(comp_dates, axis=1)], axis=1)

测量1天、3天和7天的参考时间是多少?是否要对帧中每个记录的TXN_日期执行此操作?是的,对于每个记录,请查看TXN_日期,1day指同一日期的所有交易,从过去3天开始的3天,等等。在00:00'dd/mm/YYYY 00:00'谢谢,每天只有一个时间戳。我得到一个TypeError:TypeError:(+:'Day'和'str'的不支持的操作数类型,u'发生在索引0上”)@Menkes我更新了我的帖子,以显示我是如何生成测试数据帧的。问题是因为日期列是字符串。您需要将其设置为日期列。我告诉pd.read\u csv第1列应该被解析为日期。您还可以执行
df.TXN_DATE=pd.to_datetime(df.TXN_DATE)
@Menkes同样,这是一个很好的例子,可以证明您自己提供的代码产生您正在使用的数据的有用性。当您复制和粘贴文本时,数据类型会混淆。非常感谢它的工作!假设我现在有另一个列,叫做STOCK_ID,我想计算每个特定STOCK_ID的日期窗口的不同类型,所以只有当在1天的时间窗口中每个特定STOCK_ID有两种交易类型时,不同的值才会是2,我是否需要添加另一个条件,即它等于STOCK_ID?
text = """TXN_ID                 TXN_DATE      TXN_TYPE
8C083F30C0674A72    01/01/2013 00:00    A
B610D7D4E2D14513    01/01/2013 00:00    B
698C5DD423AC42D6    01/02/2013 00:00    C
37E2B21583F949CA    01/12/2013 00:00    A
9FE25A547F964E93    01/13/2013 00:00    B
F6C14D987D584E53    01/14/2013 00:00    A"""

df = pd.read_csv(StringIO(text), delimiter='\s{2,}', parse_dates=[1], engine='python')