繁体   English   中英

逐行比较 pandas 数据帧中的每个值

[英]comparing row wise each values in pandas data frame

我的数据框看起来像(几乎 10M) -

date          value1       value2
01/02/2019       10           120
02/02/2019       21           130
03/02/2019       0            140
04/02/2019       24           150
05/02/2019       29           160
06/02/2019       32           160 
07/02/2019       54           160
08/02/2019       32           180
01/02/2019       -3           188

我最终的 output 看起来像 -

date          value1       value2      result
01/02/2019       10           120        1
02/02/2019       21           130        1
03/02/2019       0            140        0
04/02/2019       24           150        1
05/02/2019       29           160        1
06/02/2019       32           160        0
07/02/2019       54           160        0
08/02/2019       32           180        1
01/02/2019      -3            188        0

如果 value1 <=0 或 3 个连续行(value2)相同,则我的逻辑应该为 0,否则为 1

如何在 pandas 中做到这一点

像这样的东西np.where((df.value1.le(0)) | (df.value2.diff().eq(0)), 0, 1)

您可以尝试定义自己的 function 来处理连续值,其中value1大于 0,然后使用自定义系列连续分组,最后应用自定义groupby

import pandas as pd
from io import StringIO

s = '''date,value1,value2
01/02/2019,10,120
02/02/2019,21,130
03/02/2019,0,140
04/02/2019,24,150
05/02/2019,29,160
06/02/2019,32,160
07/02/2019,54,160
08/02/2019,32,180
01/02/2019,-3,188'''

df = pd.read_csv(StringIO(s), header=0, index_col=0)


def fun(group_df):
    if group_df.shape[0] >= 3:
        return pd.Series([0]*group_df.shape[0], index=group_df.index)
    else:
        return group_df.value1 > 0


consecutives = (df.value2 != df.value2.shift()).cumsum()
df['results'] = df.groupby(consecutives).apply(
    fun).reset_index(level=0, drop=True)

在这种情况下, fun是一个矢量化的 function 来检查 consectives 是否为 3 或更多,或者值是否大于 0,结果为:

print(df)
#            value1 value2  results
# date          
# 01/02/2019    10  120   1
# 02/02/2019    21  130   1
# 03/02/2019    0   140   0
# 04/02/2019    24  150   1
# 05/02/2019    29  160   0
# 06/02/2019    32  160   0
# 07/02/2019    54  160   0
# 08/02/2019    32  180   1
# 01/02/2019    -3  188   0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM