python - Pandas 多列评估以生成新列

标签 python pandas analytics

我试图根据评估值是否存在于两列中来在现有 DataFrame 中创建一个新列。

假设以下是中型数据集(3000 万个数据点)的一部分:

DATE      |ID    |3_DAY_FUTURE
2016-12-14|Bob123|2016-12-17
2016-12-15|Bob123|2016-12-18
2016-12-16|Bob123|2016-12-19
2016-12-17|Bob123|2016-12-20
2016-12-18|Bob123|2016-12-21
2016-12-19|Bob123|2016-12-22
2016-12-20|Bob123|2016-12-23
2017-01-14|Jim123|2017-01-17
2017-01-15|Jim123|2017-01-18
2017-01-16|Jim123|2017-01-19
2017-01-17|Jim123|2017-01-20
2017-01-18|Jim123|2017-01-21
2017-01-19|Jim123|2017-01-22
2017-01-20|Jim123|2017-01-23

我希望创建一个列来评估每个 ID(本例中为 Bob 和 Jim)是否具有与 future 3 天匹配的日期值。例如,Bob123 于 2016 年 12 月 14 日和 2016 年 12 月 17 日出席,因为这两个日期都与他相关联。第一行将添加一个新列,显示"is"或类似内容。以下是我希望使用新的 3_DAY_STATUS 列得到的输出示例:

DATE      |ID    |3_DAY_FUTURE|3_DAY_STATUS
2016-12-14|Bob123|2016-12-17|YES
2016-12-15|Bob123|2016-12-18|YES
2016-12-16|Bob123|2016-12-19|YES
2016-12-17|Bob123|2016-12-20|YES
2016-12-18|Bob123|2016-12-21|NO
2016-12-19|Bob123|2016-12-22|No
2016-12-20|Bob123|2016-12-23|NO
2017-01-14|Jim123|2017-01-17|YES
2017-01-15|Jim123|2017-01-18|YES
2017-01-16|Jim123|2017-01-19|YES
2017-01-17|Jim123|2017-01-20|YES
2017-01-18|Jim123|2017-01-21|NO
2017-01-19|Jim123|2017-01-22|NO
2017-01-20|Jim123|2017-01-23|NO

非常感谢任何建议。

最佳答案

通过 groupby 创建蒙版通过ID isin然后通过 numpy.where 添加新值:

df.DATE = pd.to_datetime(df.DATE)
df['3_DAY_FUTURE'] = pd.to_datetime(df['3_DAY_FUTURE'])

mask = df.groupby('ID').apply(lambda x: x['3_DAY_FUTURE'].isin(df.DATE)).values
print (mask)
[ True  True  True  True False False False  True  True  True  True False

df['3_DAY_STATUS'] = np.where(mask, 'YES', 'NO')
print (df)
         DATE      ID 3_DAY_FUTURE 3_DAY_STATUS
0  2016-12-14  Bob123   2016-12-17          YES
1  2016-12-15  Bob123   2016-12-18          YES
2  2016-12-16  Bob123   2016-12-19          YES
3  2016-12-17  Bob123   2016-12-20          YES
4  2016-12-18  Bob123   2016-12-21           NO
5  2016-12-19  Bob123   2016-12-22           NO
6  2016-12-20  Bob123   2016-12-23           NO
7  2017-01-14  Jim123   2017-01-17          YES
8  2017-01-15  Jim123   2017-01-18          YES
9  2017-01-16  Jim123   2017-01-19          YES
10 2017-01-17  Jim123   2017-01-20          YES
11 2017-01-18  Jim123   2017-01-21           NO
12 2017-01-19  Jim123   2017-01-22           NO
13 2017-01-20  Jim123   2017-01-23           NO

关于python - Pandas 多列评估以生成新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42153399/

相关文章:

python - 如何将 "dialog"输出流式传输到标准输出?

python - 在 Python 3.4 中使用 Odoo API 导入图像

python - 如何让 pandas 将 xlsx 文件(包括其工作表)复制到新的 xlsx 文件中

python - 合并具有相同名称的数据框列,但不对列进行排序

Elasticsearch 分析百分比

firebase - 在 Firebase Analytics 中查看事件的设备模型

python - Keras变量()内存泄漏

python , Selenium : unable to get raw html from javascript

python - 从 DateTime Pandas 系列中提取小时数

python - "0x15000 bytes"是什么意思,0x123 是什么类型的编码?