Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x 在熊猫中创建具有两个独特条件的新列?_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 3.x 在熊猫中创建具有两个独特条件的新列?

Python 3.x 在熊猫中创建具有两个独特条件的新列?,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,试图找出熊猫的复杂之处-我有以下示例数据框: Date Value Diff 4/2/2019 17:00 864 57 4/2/2019 17:15 864 0 4/2/2019 17:30 864 0 4/2/2019 17:45 864 0 4/2/2019 18:00 864 0 ... 5/2/2019 07:00 864 0 5/2

试图找出熊猫的复杂之处-我有以下示例数据框:

Date             Value      Diff
4/2/2019 17:00   864        57      
4/2/2019 17:15   864        0
4/2/2019 17:30   864        0
4/2/2019 17:45   864        0
4/2/2019 18:00   864        0
...
5/2/2019 07:00   864        0
5/2/2019 07:15   864        0
5/2/2019 07:30   864        0
5/2/2019 07:45   864        0
5/2/2019 08:00   864        0
5/2/2019 08:15   864        0
5/2/2019 08:30   1564       700
5/2/2019 08:45   1784       223
5/2/2019 09:00   1904       120
5/2/2019 09:15   2095       191
5/2/2019 09:30   2095       183
5/2/2019 09:45   2095       85
5/2/2019 10:00   2095       58
5/2/2019 10:15   2095       134
5/2/2019 10:30   2555       78
5/2/2019 10:45   2678       123
5/2/2019 11:00   2777       99
预期的数据帧如下所示:

Date             Value      Diff      NewCol1
4/2/2019 17:00   864        57        57
4/2/2019 17:15   864        0         63.63
4/2/2019 17:30   864        0         63.63
4/2/2019 17:45   864        0         63.63
4/2/2019 18:00   864        0         63.63
...
5/2/2019 07:00   864        0         63.63
5/2/2019 07:15   864        0         63.63
5/2/2019 07:30   864        0         63.63
5/2/2019 07:45   864        0         63.63
5/2/2019 08:00   864        0         63.63
5/2/2019 08:15   864        0         63.63
5/2/2019 08:30   1564       700       63.63
5/2/2019 08:45   1784       223       223
5/2/2019 09:00   1904       120       120
5/2/2019 09:15   2095       191       191
5/2/2019 09:30   2095       183       183
5/2/2019 09:45   2095       85        85
5/2/2019 10:00   2095       58        58
5/2/2019 10:15   2095       134       134
5/2/2019 10:30   2555       78        78
5/2/2019 10:45   2678       123       123
5/2/2019 11:00   2777       99        99
...
创建
NewCol1
有两个条件:

  • 当重复
    时,如果
    Diff
    为0,并且仅在时间范围从07:00到18:00之间,则计算0+1的数字和
    值的差值
    并将其除以(在本例中,
    (1564-864)/11
    )。请注意,
    +1
    用于计算最后一个
    0
    之后的行,该行位于
    08:30
    ,此类事件将始终连续发生,如本例所示(示例
    4/2/2019 17:15至5/2/2019 08:30

  • 如果重复
    Value
    ,且
    Diff
    大于0,则将该行中的
    Diff
    复制到
    NewCol1
    ,包括上次重复
    Value
    后的行,且
    Diff
    大于0(例如
    2019年5月2日09:45至2019年5月2日10:30

  • 熊猫是否能够对该数据帧完全执行上述条件?如果没有,我可以尝试其他Python方法吗?尽量避免使用
    if-else
    ,因为高效是很重要的,因为将有数十万行。

    添加列:

    df['NewCol1'] = df['Diff']
    

    我知道,因为您希望避免其他优化,如果-但目前该解决方案可以工作:

    时间间隔-

    适用于—


    您能否通过以下提供样品来改进您的问题?另外,如果
    Value
    没有重复代码应该执行的操作,只需复制
    Diff
    ?如果
    Diff
    为0怎么办?
    def convertValues(row):
        if (row['Diff'] > 0):
           return row['Diff']
        if (row['Diff'] == 0 and row['Date'].between_time('7:00','18:00'):
           return row['Value'] - int(row['Value'].name-1) / row.name
       
    transformedDf = df.apply(lambda x: convertValues(x), axis=1)