首页 > 解决方案 > 在 DataFrame 创建中使用先前列创建新列

问题描述

我知道如何基于 Pandas 中的另一列创建新列。我要做的是在创建 DataFrame 时基于另一列创建一个新列。这是我现在拥有的代码:

rng = np.random.default_rng()
number_of_trials = float('10E+06')
simulations = pd.DataFrame({'true_average': rng.beta(81, 219, size=int(number_of_trials))})
simulations = simulations.assign(hits=lambda x: rng.binomial(300, x.true_average, size =int(number_of_trials)))

如果可能的话,我不想做两行来在 DataFrame 中创建true_averagehits列,我想只在DataFrame对象实例化中做。我搜索的所有内容都告诉我如何分两步完成,这很好,但我知道这在 R 中是可能的,所以只是想知道 Pandas 是否具有相同的功能。

我试图创建一个基于执行 lambda 函数访问该true_average列的列,但它只是将函数本身存储为 Dataframe 中的值。

标签: pythonpandasdataframe

解决方案


我认为您可以使用用于创建原始列 (true_average) 的逻辑作为 rng.binomial 中的第二个参数:

rng = np.random.default_rng(seed=42)
number_of_trials = float('10E+06')
simulations = pd.DataFrame({'true_average': rng.beta(81, 219, size=int(number_of_trials)), 
'hits': rng.binomial(300, (rng.beta(81, 219, size=int(number_of_trials))), size =int(number_of_trials))})
print(simulations)

产量:

         true_average  hits
0            0.248803    65
1            0.253768    99
2            0.242576    67
3            0.277595    78
4            0.335829    80
...               ...   ...
9999995      0.267265    66
9999996      0.308596   100
9999997      0.279287    88
9999998      0.247802    79
9999999      0.269566    67

[10000000 rows x 2 columns]

推荐阅读