随机抽样和Pandas数据帧

时间:2015-06-02 16:03:02

标签: python pandas

我有以下数据帧cr_df,它显示ID1转换为ID2的速率

   ID1 ID2 Conversion Rate
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

然后我有另一个数据帧raw_df,格式为ID1,如:

   ID1 Value
0  1     100  
1  2     200

我的目标是以ID2格式输出数据帧final_df,如下所示:

   ID2 Value
0  C     100  
1  A     200

ID1的映射包括选择0到1之间的随机值,并根据转换率选择ID2。

我怎样才能在熊猫中实现这一目标? (我需要使用.apply吗?)

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作的组合:

答案 1 :(得分:1)

鉴于此设置:

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]})

你可以定义一个函数random_id2

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

并使用groupby/apply

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

获取系列

ID1
1    C
2    A
dtype: object

然后,您可以通过将final_df值映射到raw_df['ID1']值来构建id2

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)

产量

  ID2  Value
0   C    100
1   A    200