簡體   English   中英

根據概率生成隨機城市

[英]Generate random cities based on probabilities

我有兩張表,一張是國家、城市和用戶來自該城市的概率,另一張是用戶和他們的國家:

國家 城市 可能性
美國 紐約 0.3
美國 休斯頓 0.5
美國 洛杉磯 0.2
用戶身份 國家
1 美國
2 美國
3 美國
4 美國
5 美國
6 美國

在第二個表中,我想創建一個新列(城市),它根據概率從上表中隨機選擇一個城市; 所以應該更頻繁地選擇休斯頓。

預期 output(隨機)

用戶身份 國家 城市
1 美國 休斯頓
2 美國 休斯頓
3 美國 洛杉磯
4 美國 休斯頓
5 美國 紐約
6 美國 紐約

我為此使用 pandas 。 顯然會有更多的國家和城市,以及不同國家的更多用戶。

您可以使用np.random.choice根據給定的概率分布生成隨機樣本:


In [27]: df = pd.DataFrame({"user_id": [1, 2, 3, 4, 5, 6], "country": ["USA"]*6})

In [28]: df
Out[28]:
   user_id country
0        1     USA
1        2     USA
2        3     USA
3        4     USA
4        5     USA
5        6     USA

In [32]: df["city"] = np.random.choice(["New York", "Houston", "LA"], size=len(df), p=[0.3, 0.5, 0.2])

In [33]: df
Out[33]:
   user_id country      city
0        1     USA   Houston
1        2     USA   Houston
2        3     USA   Houston
3        4     USA        LA
4        5     USA   Houston
5        6     USA  New York

如果用戶位於不同的國家/地區,您將需要在每個國家/地區執行一次。


編輯:一致地處理user_id列中的重復項的解決方案:

In [34]: df = pd.DataFrame({"user_id": [1, 2, 3, 4, 4, 1], "country": ["USA"]*6})

In [35]: df
Out[35]:
   user_id country
0        1     USA
1        2     USA
2        3     USA
3        4     USA
4        4     USA
5        1     USA

In [36]: num_users = df["user_id"].nunique()

In [37]: num_users
Out[37]: 4

In [38]: cities = np.random.choice(["New York", "Houston", "LA"], size=num_users, p=[0.3, 0.5, 0.2])

In [39]: cities
Out[39]: array(['Houston', 'New York', 'LA', 'New York'], dtype='<U8')

In [40]: df["user_id"].unique()
Out[40]: array([1, 2, 3, 4], dtype=int64)

In [41]: mapping = {user_id: city for user_id, city in zip(df["user_id"], cities)}

In [43]: df["city"] = df["user_id"].apply(mapping.get)

In [44]: df
Out[44]:
   user_id country      city
0        1     USA   Houston
1        2     USA  New York
2        3     USA        LA
3        4     USA  New York
4        4     USA  New York
5        1     USA   Houston

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM