/ Amostragem aleatória e Pandas - python, pandas

Amostragem aleatória e frames de dados do Pandas - python, pandas

Eu tenho o seguinte dataframe, cr_df, que mostra a taxa em que ID1 converte em ID2

Taxa de Conversão ID2 ID2 0 1 A 0,046562 1 1 B 0,315975 2 1 C 0,577998 3 1 D 0,059465 4 2 A 0,6 5 2 B 0,4

Então eu tenho outro dataframe, raw_df, no formato de ID1, como:

Valor ID1 0 1 100 1 2 200

Meu objetivo é produzir um dataframe final_df, no formato ID2 que se pareça com algo como:

Valor ID2 0 C 100 1 a 200

Onde o mapeamento do ID1 consiste em selecionar um valor aleatório entre 0 e 1 e escolher o ID2 com base nas taxas de conversão.

Como posso conseguir isso nos pandas? (Eu preciso usar .apply?)

Respostas:

1 para resposta № 1

Dada esta configuração:

import numpy as np
import pandas as pd

df = pd.DataFrame({
"ID1": [1]*4+[2]*2, "ID2":list("ABCDAB"),
"Conversion Rate": [0.046562, 0.315975, 0.577998, 0.059465, 0.6, 0.4]})
raw_df = pd.DataFrame({"ID1": [1,2], "Value":[100, 200]})

você poderia definir uma função random_id2:

def random_id2(x):
return np.random.choice(x["ID2"], p=x["Conversion Rate"].values)

E use groupby/apply:

id2 = df.groupby(["ID1"]).apply(random_id2)

para obter a série

ID1
1    C
2    A
dtype: object

Você poderia então construir final_df mapeando raw_df["ID1"] valores para id2 valores:

final_df = raw_df.copy()
final_df["ID1"] = final_df["ID1"].map(id2)
final_df = final_df.rename(columns={"ID1": "ID2"})

import numpy as np
import pandas as pd

df = pd.DataFrame({
"ID1": [1]*4+[2]*2, "ID2":list("ABCDAB"),
"Conversion Rate": [0.046562, 0.315975, 0.577998, 0.059465, 0.6, 0.4]})
raw_df = pd.DataFrame({"ID1": [1,2], "Value":[100, 200]})

def random_id2(x):
return np.random.choice(x["ID2"], p=x["Conversion Rate"].values)

id2 = df.groupby(["ID1"]).apply(random_id2)

final_df = raw_df.copy()
final_df["ID1"] = final_df["ID1"].map(id2)
final_df = final_df.rename(columns={"ID1": "ID2"})

print(final_df)

rendimentos

  ID2  Value
0   C    100
1   A    200

1 para resposta № 2

Você pode fazer uma combinação dos seguintes itens:

  • Para fazer uma escolha aleatória ponderada das linhas, use a resposta em essa questão; especificamente, fazer uma seleção ponderada de range(len(df)) com os pesos dados por df[Conversion Rate].

  • Para selecionar as linhas com os índices fornecidos, consulte Aqui.

  • Para unir o dataframe resultante com o segundo, use merge