【发布时间】:2020-04-19 17:01:39
【问题描述】:
关于这个有很多类似的问题,但没有一个与我的问题相近。
我想将一个 csv 数据分成两组长度相等、条件相同的组,这里是年龄。此外,更难的问题可能是结合多个抽样标准,这可能是年龄 && 工作经验 && 管理经验,因此结果尽可能标准化。
我知道这是一个 NP(或更复杂的复杂性)的优化问题,也许不会有封闭形式或明确的答案,但足够接近会很好。
import random
import csv
import numpy as np
import pandas as pd
classlist = pd.read_csv('Classlist-Test.csv')
df = pd.DataFrame(classlist)
grouped = df.groupby(['Age'])
grouped.sum()
Work Experience (Yrs) Management Experience (Yrs)
Age
23 1 1
24 14 2
25 15 8
26 42 10
27 44 5
28 30 8
29 21 3
30 19 6
31 44 12
32 37 5
33 31 9
34 21 12
35 18 1
36 24 0
38 21 4
39 35 16
40 28 18
41 15 7
45 49 17
46 20 11
53 25 10
>>> df.mean()
Age 30.158879
Work Experience (Yrs) 5.177570
Management Experience (Yrs) 1.542056
dtype: float64
>>> df.median()
Age 28.0
Work Experience (Yrs) 4.0
Management Experience (Yrs) 0.0
dtype: float64
>>> df.std()
Age 5.557843
Work Experience (Yrs) 4.580132
Management Experience (Yrs) 2.533848
dtype: float64
关于如何在 Python 中做到这一点有什么建议吗?有没有一种抽样方法可以做到这一点? 谢谢
【问题讨论】:
-
我认为优化在这里不是一个好的选择。您想查看最近的邻居和配对匹配方法。你可以在网上找到很多关于这个的。
-
计算 Age 的 cumsum 并确定 50% 的值,然后将该值的数据集分成两组。有了更多标准,这也可以类似地工作。
-
@JanChristophTerasa,这似乎是 50% 的百分位数,但同样,如果我将其拆分,我将有两个班级,一个高于平均水平,另一个平均水平较低。我希望两者最终都具有相同的平均值。
-
一般来说,不可能确保两个组的均值相同。
标签: python pandas group-by split