Python Pandas质疑匹配的行,查找索引并创建列

时间:2018-10-25 08:08:52

标签: python pandas

我正在学习Python并试图解决问题,但被困在这里。我想执行以下操作:

数据帧称为:df_cleaned_sessions

它包含带有时间戳的两列:

  1. datetime_only_first_engagement
  2. datetime_sessions

为您提供信息,datetime_only_first_engagement列的时间戳比datetime_sessions小得多,sessions列具有很多NA值,因为此数据帧是左联接的结果。

我想执行以下操作:
查找datetime_only_first_engagement时间戳等于datetime_sessions时间戳的行,保存这些行的索引,并在数据框中创建一个名为“ is_conversion”的新列,然后进行设置(匹配时间戳)索引到True。其他索引应设置为False

希望有人可以帮助我!

非常感谢。

3 个答案:

答案 0 :(得分:0)

据我了解,您需要numpy.where

import numpy as np
df_cleaned_sessions['is_conversion'] = np.where(df_cleaned_sessions['datetime_only_first_engagement'] == df_cleaned_sessions['datetime_sessions'], True, False)

答案 1 :(得分:0)

df_cleaned_sessions['is_conversion'] = df_cleaned_sessions['datetime_only_first_engagement'] == df_cleaned_sessions['datetime_sessions'] 

答案 2 :(得分:0)

如果您提供了示例代码和预期的输出,会更容易,但是通过阅读您的问题,我觉得您希望执行以下操作:

import pandas as pd

让我们建立一个样本df:

df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8],[10,11]], columns=["A", "B"])
print(df)
    A   B
0   1   2
1   3   4
2   5   6
3   7   8
4   10  11

让我们假设df1是:

df1 = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8],[9,10]], columns=["D", "E"])
print(df1)
    D   E
0   1   2
1   3   4
2   5   6
3   7   8
4   9   10

应用以下代码检查A的{​​{1}}列中的df的{​​{1}}列:

D

类似地,对于您的问题,您也可以在匹配同一数据框的不同列时应用相同的逻辑。我认为您需要:

df1

根据评论:将其添加到上面的代码下方:

df['is_conversion']= df['A'].isin(df1['D']).astype(bool)
print(df)


A   B   is_conversion
0   1   2   True
1   3   4   True
2   5   6   True
3   7   8   True
4   10  11  False

使用df_cleaned_sessions['is_conversion'] = df_cleaned_sessions['datetime_only_first_engagement'].isin(df_cleaned_sessions['datetime_sessions']).astype(bool) 的替代答案:

df_cleaned_sessions['is_conversion'] = df_cleaned_sessions['is_conversion'].replace({True:1, False:0})

希望有帮助..!