Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 随机抽样和数据帧_Python_Pandas - Fatal编程技术网

Python 随机抽样和数据帧

Python 随机抽样和数据帧,python,pandas,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 ID1-ID2转换率 01 A 0.046562 1 B 0.315975 2 1 C 0.577998 31

我有下面的数据帧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 ID1-ID2转换率 01 A 0.046562 1 B 0.315975 2 1 C 0.577998 31 D 0.059465 4.2 A 0.6 5 2 B 0.4 然后我有另一个数据帧,raw_df,格式为ID1,例如:

ID1 Value 0 1 100 1 2 200 ID1值 0 1 100 1 2 200 我的目标是以ID2格式输出数据帧final_df,如下所示:

ID2 Value 0 C 100 1 A 200 ID2值 0摄氏100度 1A 200 其中,来自ID1的映射包括选择0和1之间的随机值,并根据转换率选择ID2


我怎样才能在熊猫身上做到这一点?(是否需要使用.apply?

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

  • 要对行进行加权随机选择,请使用中的答案;具体来说,使用
    df[转换率]
    给出的权重对
    范围(len(df))进行加权选择

  • 要选择具有给定索引的行,请参见

  • 要将生成的数据帧与第二个数据帧连接起来,请使用

鉴于此设置:

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
然后,您可以通过将
raw_df['ID1']
值映射到
id2
值来构建
final_df

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

屈服

  ID2  Value
0   C    100
1   A    200
  ID2  Value
0   C    100
1   A    200