Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.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 在dataframe行中查找值-创建新列,突出显示下一行匹配_Python_Pandas - Fatal编程技术网

Python 在dataframe行中查找值-创建新列,突出显示下一行匹配

Python 在dataframe行中查找值-创建新列,突出显示下一行匹配,python,pandas,Python,Pandas,我试图在一个dataframe行中找到一个值,并创建一个新列,突出显示下一行是否匹配。因此,对于以下示例: rng = pd.DataFrame( {'test_1': ['A', 'A','A', 'A', 'B','B', 'A' , 'A', 'A', 'A','A' , 'A', 'A', 'A',]}, index = pd.date_range('4/2/2014', periods=14, freq='BH')) reg 2014-04-02 13:00:00和2014-04-

我试图在一个dataframe行中找到一个值,并创建一个新列,突出显示下一行是否匹配。因此,对于以下示例:

rng = pd.DataFrame( {'test_1': ['A', 'A','A', 'A', 'B','B', 'A' , 'A', 'A', 'A','A' , 'A', 'A', 'A',]},  index = pd.date_range('4/2/2014', periods=14, freq='BH'))
reg
2014-04-02 13:00:00和2014-04-02 14:00:00上的行==B,因此存在匹配:

    test_1
2014-04-02 09:00:00 A
2014-04-02 10:00:00 A
2014-04-02 11:00:00 A
2014-04-02 12:00:00 A
2014-04-02 13:00:00 B
2014-04-02 14:00:00 B
2014-04-02 15:00:00 A
2014-04-02 16:00:00 A
2014-04-03 09:00:00 A
2014-04-03 10:00:00 A
2014-04-03 11:00:00 C
2014-04-03 12:00:00 A
2014-04-03 13:00:00 D
2014-04-03 14:00:00 D
因此,新列应如下所示:

B_Matches
    2014-04-02 09:00:00 0
    2014-04-02 10:00:00 0
    2014-04-02 11:00:00 0
    2014-04-02 12:00:00 0
    2014-04-02 13:00:00 0
    2014-04-02 14:00:00 1
    2014-04-02 15:00:00 0
    2014-04-02 16:00:00 0
    2014-04-03 09:00:00 0
    2014-04-03 10:00:00 0
    2014-04-03 11:00:00 0
    2014-04-03 12:00:00 0
    2014-04-03 13:00:00 0
    2014-04-03 14:00:00 0
然后我将在其他专栏中对C、D等做同样的处理。我基本上是想找出某个条件出现的时间,下一个周期是相同的,我将在这列上做一个count(),看看下一个周期匹配的频率。请同时说明其他方法


感谢您的帮助。

您可以定义一个func,它接受您的值并返回是否任何行符合您的条件,这将适用于您传递的任何值,然后将布尔级数转换为
int
,以便将
True
False
分别转换为
1
0

In [220]:
def func(val):
    return ((rng['test_1'] == val) & (rng['test_1'].shift() == val)).astype(int)
​
func('B')

Out[220]:
2014-04-02 09:00:00    0
2014-04-02 10:00:00    0
2014-04-02 11:00:00    0
2014-04-02 12:00:00    0
2014-04-02 13:00:00    0
2014-04-02 14:00:00    1
2014-04-02 15:00:00    0
2014-04-02 16:00:00    0
2014-04-03 09:00:00    0
2014-04-03 10:00:00    0
2014-04-03 11:00:00    0
2014-04-03 12:00:00    0
2014-04-03 13:00:00    0
2014-04-03 14:00:00    0
Freq: BH, Name: test_1, dtype: int32

In [222]:
func('A')

Out[222]:
2014-04-02 09:00:00    0
2014-04-02 10:00:00    1
2014-04-02 11:00:00    1
2014-04-02 12:00:00    1
2014-04-02 13:00:00    0
2014-04-02 14:00:00    0
2014-04-02 15:00:00    0
2014-04-02 16:00:00    1
2014-04-03 09:00:00    1
2014-04-03 10:00:00    1
2014-04-03 11:00:00    1
2014-04-03 12:00:00    1
2014-04-03 13:00:00    1
2014-04-03 14:00:00    1
Freq: BH, Name: test_1, dtype: int32

太好了,再次谢谢你,埃德楚姆。我将在不同的df列中使用它,这些df列被稍微修改为
def func_match(df_in,val):return((df_in==val)和(df_in.shift()==val)).astype(int)