Как объединить 2 списка списков вместе с несколькими столбцами в python - PullRequest
0 голосов
/ 01 марта 2020

У меня есть эти два списка списков, последний столбец - вероятность этого события

#Pr(Fraud | Trav)
f3 = [[
    [True, True, 0.01],
    [False, True, 0.004],
    [True, False, 0.99],
    [False, False, 0.996]
], ["Trav", "Fraud"]]

f4 = [[
    [False, True, True, 0.1],
    [False, False, True, 0.01],
    [True, True, True, 0.9],
    [True, False, True, 0.9],
    [False, True, False, 0.9],
    [False, False, False, 0.99],
    [True, True, False, 0.1],
    [True, False, False, 0.1],
], ["Trav", "Fraud", "FP"]]

, и я хотел бы объединить их вместе Травом и Мошенником, чтобы создать следующую таблицу:

[[True,True,True,0.009]
[True,True,False,0.001]
[True,False,True,0.891]
[True,False,False,0.099]
[False,True,True,0.0004]
[False,True,False,0.0036]
[False,False,True,0.00996]
[False,False,False,0.98604]],
["Trav","Fraud","FP"]]

Заранее спасибо !!!

1 Ответ

1 голос
/ 01 марта 2020

Вы можете использовать panda.DataFrame.merge, чтобы объединить их.

Если вы просто хотите объединить два списка:

def merge_probability(f3, f4):
    df0 = pd.DataFrame(f3[0], columns=f3[1] + ["probability0"])
    df1 = pd.DataFrame(f4[0], columns=f4[1] + ["probability1"])

    df = df0.merge(df1)

    df["probability"] = df["probability0"] * df["probability1"]
    df = df.drop(["probability0", "probability1"], axis=1)
    return [df.values.tolist(), f4[1]]

Или, если необходимо объединить несколько списков:

def merge_probabilitys(*fs):
    size = len(fs)
    dfs = [
        pd.DataFrame(fs[i][0], columns=fs[i][1] + ["probability" + str(i)])
        for i in range(size)
    ]

    df_res = dfs[0]
    for df in dfs[1:]:
        df_res = df_res.merge(df)

    df_res["probability"] = 1
    for i in range(size):
        df_res["probability"] *= df_res["probability" + str(i)]

    df_res = df_res.drop(["probability" + str(i) for i in range(size)], axis=1)
    return [df_res.values.tolist(), list(df_res.columns)[:-1]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...