python - pandas 中的按列采样
问题描述
我有以下数据框:
df = pd.DataFrame(
dict(
A=[0, 0, 0.5, 0.6],
B=[0, 0.7, 0.1, 0],
C=[1, 0.3, 0.4, 0.4],
)
)
我想要一个返回数组/列表的采样方法,例如:
['C', 'B', 'C', 'A']
具有以下属性:
A
在数组的每个元素处,该元素为B
或的概率分别与列的值和在该行数中C
的值成正比。A
B
C
有没有一种简单的方法可以在 python 中做到这一点?
解决方案
您可以尝试生成一个随机数组,然后比较沿行的累积分布,最后使用idxmax
:
s = np.random.rand(len(df))
df.cumsum(1).gt(s[:,None]).idxmax(1)
测试方法:
counts = 0
for _ in range(1000):
s = np.random.rand(len(df))
sample = df.cumsum(1).gt(s[:,None]).idxmax(1)
counts = pd.crosstab(sample.index, sample).add(counts, fill_value=0)
输出(接近原始数据框):
col_0 A B C
row_0
0 0.0 0.0 1000
1 0.0 688.0 312
2 514.0 96.0 390
3 601.0 0.0 399
推荐阅读
- javascript - angular 2 table 折叠在排序时无法正常工作
- go - 修复 Go 中的导入周期
- google-cloud-platform - Google Cloud Platform IAM,我没有收到会员邀请邮件
- arm - ARM 中的 VMNNM 指令
- c# - 我想在 c# 中加密消息并再次在我的 android 应用程序中解密它们。
- python - Python Pandas - 将子字符串从一列复制到另一列
- php - Yii2:我可以从模型类之外附加事件吗?
- angularjs - 条件 HTML
- javascript - How to remove react-native-elements in react-native project
- visual-studio - TFS 上的 Visual Studio 2017 社区安装消失