我有兩個資料框。一個看起來像:
Year Count
1 3
2 2
3 1
4 5
5 4
另一個看起來像
ID Value
1 100
2 50
3 0
4 25
5 50
我正在尋找使用第一個資料幀中的計數來回圈第二個資料幀。我想使用每一行中的計數值從第二個資料幀的 Value 列中隨機選擇 N 次,其中 N 是 Count 列中的值 - 并將這些值相加,從而在第一個資料幀中給出一個新列:
Year Count RandSum
1 3 200
2 2 50
3 1 100
4 5 225
5 4 200
即,添加到第一個資料幀的 RandSum 列是第二個資料幀中值列的“計數”隨機選擇的總和(即在第一行,計數 = 3,因此從第二個表中的值列隨機抽取100、50 和 50 = 200)
對這個相關的 python 新手的任何幫助表示贊賞。
uj5u.com熱心網友回復:
numpy.random.choice這是在串列理解中使用的另一個想法:
import numpy as np
np.random.seed(0)
df1['RandSum'] = [np.random.choice(df2['Value'], n).sum() for n in df1['Count']]
[出去]
Year Count RandSum
0 1 3 175
1 2 2 50
2 3 1 50
3 4 5 275
4 5 4 200
uj5u.com熱心網友回復:
我相信你可以用sample這個,然后按行取總和
import pandas as pd
df = pd.DataFrame({'Year': [1, 2, 3, 4, 5], 'Count': [3, 2, 1, 5, 4]})
df2 = pd.DataFrame({'ID': [1, 2, 3, 4, 5], 'Value': [100, 50, 0, 25, 50]})
df['RandSum'] = df.apply(lambda x: df2['Value'].sample(x['Count']), axis=1).sum(1)
print(df)
輸出(會因運行而異)
Year Count RandSum
0 1 3 150.0
1 2 2 150.0
2 3 1 50.0
3 4 5 225.0
4 5 4 225.0
uj5u.com熱心網友回復:
您應該匯入熊貓并創建資料框。然后,您選擇要使用for回圈函式迭代的列。之后,您在目標列中隨機選擇多個值并將其相加。最后,將其放入名為 的輸出列RandSum中。
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'Year': [1, 2, 3, 4, 5], 'Count': [3, 2, 1, 5, 4]})
df2 = pd.DataFrame({'ID': [1, 2, 3, 4, 5], 'Value': [100, 50, 0, 25, 50]})
df1["RandSum"] = np.nan
for i, count in enumerate(df1["Count"]):
sample = df2["Value"].sample(n = count)
df1.iloc[i, df1.columns.get_loc("RandSum")] = sample.sum()
df1.head()
每次運行時輸出都會有所不同。
| 年 | 數數 | 亂數 |
|---|---|---|
| 1 | 3 | 125.0 |
| 2 | 2 | 150.0 |
| 3 | 1 | 25.0 |
| 4 | 5 | 225.0 |
| 5 | 4 | 175.0 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489171.html
下一篇:在兩個單獨的串列中檢查相同的值
