已经不会用excel了

比如说我要填一百个数,随机填入百分之七十的数字1,百分之二十的数字2,百分之十的数字3。而且在B1-B100中这三个数字是打乱的,请问具体的excel函数是什么😭

引用chatgpt部分指引作答:
两种方法:

img

第一种:
用公式:=CHOOSE(RANDBETWEEN(1,10),1,1,1,1,1,1,1,2,2,3),复制到第一个单元格,点击+号向下拉就OK了
第二种:
你还可以使用Excel的"数据分析"工具来生成指定比例的随机数。可以按照以下步骤进行操作:

1 确保"数据分析"工具已经加载。如果没有加载,可以通过点击"文件" -> "选项" -> "加载项" -> "Excel加载项" -> "数据分析工具"进行加载。
2 在B1-B100中填入1、2、3的初始值。
3 选择"B1-B100"范围。
4 点击"数据"选项卡中的"数据分析",然后选择"随机数生成器"。
5 在"随机数生成器"对话框中,选择"整数"选项,设置"生成数量"为100,勾选"置换选定的值"。
6 在"概率分布"选项卡中,输入1、2、3的对应概率为70%、20%、10%。
7 点击"确定"生成随机数。
这样,B1-B100范围中的数字就会根据指定的比例随机生成,并且是打乱的。

试试这个公式:=INDEX({1,2,3},RANDBETWEEN(1,100))
第一个单元格填入这个公式后,鼠标移到这个单元格右下角,鼠标变成+,点住往下拉,填充下面99个单元格。这 100 单元格中的数字就会以 70% 的概率为 1,20% 的概率为 2,和 10% 的概率为 3 填充,并且它们是随机打乱的。

可以使用Excel自带的RANDBETWEEN函数和IF函数来实现这个功能。具体的公式如下:
在B1单元格中输入以下公式:=IF(RANDBETWEEN(1,100)<=70,1,IF(RANDBETWEEN(1,100)<=90,2,3))
然后将B1单元格中的公式复制到B2-B100单元格即可。

用python还是容易写出来的,如下:

import random

N = 20
data, percent = range(1, 4), [0.7, 0.2, 0.1]

while 1:
    res = random.choices(data,weights=percent,k= N)
    if [res.count(i) for i in data]== list(map(lambda x: x * N  , percent)) :
        break
print(res)
--result  20个数的
[1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 3, 1, 3, 1, 1, 2]

最简单的方法(操作麻烦点)
1.按顺序写下70个数字1,20个数字2,10个数字3.
2.在旁边一列用rand函数生成100个随机数
3.使用排序,就可以得到打乱顺序,但比例符合要求的100个数字

我这里wps,直接的可用函数没有:

方案1、手动操作,辅助列B

填充A1:A100,70个1,20个2,10个3;
填充B1:B100,=rand();ctrl+enter
排序B列,得到结果;
删除B列

img

方案2、自定义函数VBA,方案1的自动化

Sub 批量随机数()

    Range("A1:A70").Value = 1
    Range("A70:A90").Value = 2
    Range("A90:A100").Value = 3
    
    Columns("A:A").Select
    With Columns("B:B")
        .Insert Shift:=-4159
        .Select
    End With
    Range("B1").Select
    Selection.Formula = "=RAND()"
    Range("B1").Select
    Selection.AutoFill Destination:=Range("B1:B100"), Type:=xlFillDefault
    Range("B1:B100").Select
    Range("B1").Select
    With ActiveSheet.Sort
        With .SortFields
            .Clear
            .Add Key:=Range("B2"), Order:=xlAscending
        End With
        .Header = xlGuess
        .MatchCase = False
        .SortMethod = xlPinYin
        .Orientation = xlSortColumns
        .SetRange Rng:=Range("A1:J100")
        .Apply
    End With
    Columns("B:B").Select
    Selection.Delete Shift:=xlShiftToLeft
 
End Sub

最好就是加一个辅助列,比如A1-A100设置成=rand(),
然后B1-B100提前填充好70个1、20个2和10个3,
然后把A列排序一下,这样B1-B100就全打乱了,
最后删除A列即可。
这样做的好处是,B1-B100随机分配了70个1、20个2和10个3,均匀的很,上面使用RANDBETWEEN的方法不能保证随机出来的就是70个1、20个2还是10个3

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7494984
  • 除此之外, 这篇博客: 一、绘制不同类别特征均值标准差直方图中的 1.1从excel种读取数据 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #读取数据
    JOVIs = pd.read_csv(r'G:\数据恢复\2021工作\0325_野外实验设计\4_第二届数字地球大会\3_实验处理\9_出图V2\2_植被指数\Fieldfeature0416.csv')
    # JOVIs = pd.read_csv(r'G:\数据恢复\2021工作\0325_野外实验设计\4_第二届数字地球大会\3_实验处理\9_出图V2\2_植被指数\feature0325.csv')