首页 > 解决方案 > 如何根据python中2列的条件创建具有值的新数据框列?

问题描述

我有 2 个数据框,一个包含 2 列(日期和键),另一个包含相同的 2 列(日期和键)。如果日期和密钥存在于另一个数据框中,我想在一个数据框中创建一个值为“1”的新列,如果不存在则为“0”。这是一个例子:

df1:
+---------+--------+
|  date   |  key   |
+---------+--------+
|  date1  |    A   |
+---------+--------+
|  date2  |    A   |
+---------+--------+
|  date3  |    B   |
+---------+--------+


df2:
+---------+--------+
|  date   |  key   |
+---------+--------+
|  date1  |    A   |
+---------+--------+
|  date4  |    C   |
+---------+--------+
|  date5  |    B   |
+---------+--------+


resulting df1:

+---------+--------+--------+
|  date   |  key   |  col3  |
+---------+--------+--------+
|  date1  |    A   |   1    |
+---------+--------+--------+
|  date2  |    A   |   0    |
+---------+--------+--------+
|  date3  |    B   |   0    |
+---------+--------+--------+


本例中,由于df2中存在df1(date1,A)的第一行,col3的值为1,其他行为0。

我该怎么做?

标签: pythonpandasdataframe

解决方案


对新列使用indicator参数,然后1,0通过比较both字符串转换为:

df = df1.merge(df2, how='left', indicator='col3', on=['date','key'])
df['col3'] = df['col3'].eq('both').astype(int)

或者:

df['col3'] = np.where(df['col3'].eq('both'), 1, 0)

推荐阅读