Python:根据不同的条件新建一列
Python: Create a new column based on different conditions
我有一个包含不同列的数据集。看起来像这样:
ID = [97,97,97,19,19,33,33,33,33,33,11]
DATE = [2018-09,2018-09,2020-02,2021-01,2021-01,2017-04,2017-04,2017-04,2019-09,2019-09,2022-05]
Destination_1 = [BRAZIL,BRAZIL,BRAZIL,ARGENTINA,MOROCCO,INDONESIA,USA,BRAZIL,EGYPT,LEBANON,USA]
Destination_2 = [BRAZIL,URUGUAY,SINGAPORE,VENEZUELA,THAILAND,PERU,ECUADOR,USA,ALGERIA, EGYPT,CANADA]
我想根据以下条件创建一个新列 OUTPUT:
对于每个 ID,如果在同一日期 DESTINATION_1 中至少有一个等于 DESTINATION_2,则输出应为 TRUE,否则为 FALSE。
OUTPUT 列所需的结果应为:
OUTPUT=[TRUE, TRUE, FALSE , FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE]
意味着如果在同一日期,每个 ID 至少有一个目的地是公共的,则满足条件并且输出为 TRUE。
我怎么能这样做?到目前为止我试过:
for sublist in df["ID"]:
if (df["Destination_1"] == df["Destination_2"]).any():
print("True")
else :
print("False")
但这对我不起作用,我不知道如何在不出错的情况下添加与 DATE 有关的第二个条件。
有人可以帮我吗?
您可以尝试 groupby
并使用 isin
检查值是否存在,然后 assign
out = (df.groupby(['ID', 'DATE'])
.apply(lambda g: g.assign(OUTPUT=[g['Destination_1'].isin(g['Destination_2']).any()]*len(g))))
print(out)
ID DATE Destination_1 Destination_2 OUTPUT
0 97 2018-09 BRAZIL BRAZIL True
1 97 2018-09 BRAZIL URUGUAY True
2 97 2020-02 BRAZIL SINGAPORE False
3 19 2021-01 ARGENTINA VENEZUELA False
4 19 2021-01 MOROCCO THAILAND False
5 33 2017-04 INDONESIA PERU True
6 33 2017-04 USA ECUADOR True
7 33 2017-04 BRAZIL USA True
8 33 2019-09 EGYPT ALGERIA True
9 33 2019-09 LEBANON EGYPT True
10 11 2022-05 USA CANADA False
我有一个包含不同列的数据集。看起来像这样:
ID = [97,97,97,19,19,33,33,33,33,33,11]
DATE = [2018-09,2018-09,2020-02,2021-01,2021-01,2017-04,2017-04,2017-04,2019-09,2019-09,2022-05]
Destination_1 = [BRAZIL,BRAZIL,BRAZIL,ARGENTINA,MOROCCO,INDONESIA,USA,BRAZIL,EGYPT,LEBANON,USA]
Destination_2 = [BRAZIL,URUGUAY,SINGAPORE,VENEZUELA,THAILAND,PERU,ECUADOR,USA,ALGERIA, EGYPT,CANADA]
我想根据以下条件创建一个新列 OUTPUT:
对于每个 ID,如果在同一日期 DESTINATION_1 中至少有一个等于 DESTINATION_2,则输出应为 TRUE,否则为 FALSE。
OUTPUT 列所需的结果应为:
OUTPUT=[TRUE, TRUE, FALSE , FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE]
意味着如果在同一日期,每个 ID 至少有一个目的地是公共的,则满足条件并且输出为 TRUE。
我怎么能这样做?到目前为止我试过:
for sublist in df["ID"]:
if (df["Destination_1"] == df["Destination_2"]).any():
print("True")
else :
print("False")
但这对我不起作用,我不知道如何在不出错的情况下添加与 DATE 有关的第二个条件。
有人可以帮我吗?
您可以尝试 groupby
并使用 isin
检查值是否存在,然后 assign
out = (df.groupby(['ID', 'DATE'])
.apply(lambda g: g.assign(OUTPUT=[g['Destination_1'].isin(g['Destination_2']).any()]*len(g))))
print(out)
ID DATE Destination_1 Destination_2 OUTPUT
0 97 2018-09 BRAZIL BRAZIL True
1 97 2018-09 BRAZIL URUGUAY True
2 97 2020-02 BRAZIL SINGAPORE False
3 19 2021-01 ARGENTINA VENEZUELA False
4 19 2021-01 MOROCCO THAILAND False
5 33 2017-04 INDONESIA PERU True
6 33 2017-04 USA ECUADOR True
7 33 2017-04 BRAZIL USA True
8 33 2019-09 EGYPT ALGERIA True
9 33 2019-09 LEBANON EGYPT True
10 11 2022-05 USA CANADA False