Python 非比例随机抽样
我有一个Python 非比例随机抽样,python,pandas,numpy,Python,Pandas,Numpy,我有一个熊猫数据帧,比如这个: deviceID timestamp time_since_previous_timestamp A 3 NaN A 14 11 A 127 113 A 133 6 # 7k other data points for device
熊猫数据帧
,比如这个:
deviceID timestamp time_since_previous_timestamp
A 3 NaN
A 14 11
A 127 113
A 133 6
# 7k other data points for deviceID = A
B 1 NaN
B 12 11
# 1.5k other datapoints for deviceID = B
C 42 NaN
C 48 6
# 600 other data points for deviceID = C
以此类推,基本上我无法控制每个设备id
有多少个数据点,它可能会有很大的变化
为了绘制一些东西,而不会因为某些deviceID
的数据点比其他的多得多而扭曲我的绘图,我考虑对我的数据帧进行随机抽样,目的是从每个deviceID
中获得大约相同数量的数据点(即:我的样本将有约400行deviceID=A
,约400行deviceID=B
,约400行deviceID=C
,依此类推)
我该怎么做?(使用pandas
和/或numpy
和/或两者都不使用)
编辑:我正在绘制的内容: 首先,我对上一个时间戳以来的时间进行分组并计数:
time_since_previous_timestamp count
NaN 3
6 2
11 2
113 1
然后将count
绘制为y轴,将time\u自上一个时间戳以来的时间
绘制为x轴。您可以使用指定n=400
组合,然后使用如下方式连接所有零件:
df = pd.concat([df.loc[df.ID == 'A'].sample(n=400),df.loc[df.ID == 'B'].sample(n=400),df.loc[df.ID == 'C'].sample(n=400)])
示例测试:
#df:
# B ID
#0 10 A
#1 9 A
#2 8 A
#3 7 A
#4 6 B
#5 5 B
#6 4 B
#7 3 C
#8 2 C
#9 1 C
df = pd.concat([df.loc[df.ID == 'A'].sample(n=2),df.loc[df.ID == 'B'].sample(n=2),df.loc[df.ID == 'C'].sample(n=2)])
输出:
B ID
0 10 A
3 7 A
6 4 B
5 5 B
8 2 C
7 3 C
您还可以修复random_state
以始终具有相同的随机样本
我相信这就是你所要求的。你将绘制什么?我不确定这是否相关,但我已经在OP中为你的问题添加了答案。请注意,我也修改了数据集。