python - 在数据帧行中查找值 - 创建新列,突出显示下一行匹配

标签 python pandas

我正在尝试在 Pandas 数据帧行中查找一个值,并创建一个新列,突出显示下一行是否匹配。因此对于以下示例:

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() 来查看下一个周期匹配的频率。还请展示执行此操作的任何其他方法。

感谢您的帮助。

最佳答案

您可以定义一个函数,它接受您的值并返回是否有任何行满足您的条件,这适用于您传递的任何值,然后将 bool 系列转换为int,以便它转换TrueFalse 分别为 10:

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

关于python - 在数据帧行中查找值 - 创建新列,突出显示下一行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38239617/

相关文章:

python - 如何对文本文件中的数字进行分类?

Python动态函数生成

python - 为什么 PlotWidget 在 GridLayout 单元格中无法缩放?

python - Pandas:在分组数据框中选择一天频率的倍数的日期?

python - 如何交换两个 DataFrame 列?

python - Pandas :一个系列的真值是模棱两可的

python - Pandas 数据帧的视觉探索

python - blender 比例值未更新

python - 使用数据框从字典中仅选择所需的键

python - 使用多个 If-else 创建 Pandas 变量