我想使用pandas sample函数,但没有分组或过滤数据的标准。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(low=0, high=5, size=(10000, 2)),columns=['a', 'b']) print(df.sample(n=100))
这将采样100行,但是如果我想在df['a']中采样包含0的50行到包含1的50行呢?
df['a']
wfsdck301#
您可以使用==运算符来创建布尔值的列表 *。当上述列表放入getter([])时,它将过滤值。如果需要,可以使用n=50创建50行的样本大小。
==
[]
n=50
df[df['a']==1].sample(n=50)
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(low=0, high=5, size=(10000, 2)),columns=['a', 'b']) print(df[df['a']==1].sample(n=50))
如果您想对a为1或0的所有50个样本进行采样:
print(df[(df['a']==1) | (df['a']==0)].sample(n=50))
如果你想要50个样品:
df1 = df[df['a']==1].sample(n=50) df0 = df[df['a']==0].sample(n=50) print(pd.concat([df1,df0]))
xam8gpfp2#
这里有一个解决方案,它将支持您喜欢的任意多个值(例如0、1、2、3):
selected_rows = df.groupby('a', group_keys=False).apply(lambda x: x.sample(n=50))
2条答案
按热度按时间wfsdck301#
您可以使用
==
运算符来创建布尔值的列表 *。当上述列表放入getter([]
)时,它将过滤值。如果需要,可以使用n=50
创建50行的样本大小。新增代码
完整代码
更隐晦的DataFrame采样
如果您想对a为1或0的所有50个样本进行采样:
如果你想要50个样品:
xam8gpfp2#
这里有一个解决方案,它将支持您喜欢的任意多个值(例如0、1、2、3):