[英]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.