【问题标题】:Create a DataFrame for MultiClass classification为多类分类创建一个 DataFrame
【发布时间】:2021-06-22 11:18:59
【问题描述】:

我有一个包含 n 行的数据框,我想从 m 个类中为每一行随机分配一个类,使所有类的比例相同。

例子:

>>> classes = ['c1','c2','c3','c4']
>>> df = pd.DataFrame(np.random.randn(100, 5), columns = list("abcde"))
>>> df
           a         b         c         d         e
0  -0.341559  1.499159  0.269614 -0.198663 -1.081290
1  -1.966477  1.902292 -0.092296 -1.730710 -1.342866
2   1.188634 -2.851902  1.130480 -0.495677 -0.569557
3  -0.816190  1.205463  1.157507 -0.217025 -0.160752
4  -2.001114 -0.818852 -0.696057 -0.874615 -0.577101
..       ...       ...       ...       ...       ...
95  0.502192  0.434275  0.358244 -0.763562 -0.787102
96 -1.071011  0.045387  0.297905 -0.120974  0.185418
97  2.458274 -1.852953 -0.049336 -0.150604 -0.292824
98  1.992513 -0.431639  0.566920 -1.289439  0.626914
99  0.685915 -0.723009 -0.168497  1.630057  1.587378

[100 rows x 5 columns]

预期输出:

>>> df
           a         b         c         d         e class
0  -0.341559  1.499159  0.269614 -0.198663 -1.081290    c3
1  -1.966477  1.902292 -0.092296 -1.730710 -1.342866    c4
2   1.188634 -2.851902  1.130480 -0.495677 -0.569557    c2
3  -0.816190  1.205463  1.157507 -0.217025 -0.160752    c3
4  -2.001114 -0.818852 -0.696057 -0.874615 -0.577101    c1
..       ...       ...       ...       ...       ...   ...
95  0.502192  0.434275  0.358244 -0.763562 -0.787102    c1
96 -1.071011  0.045387  0.297905 -0.120974  0.185418    c3
97  2.458274 -1.852953 -0.049336 -0.150604 -0.292824    c2
98  1.992513 -0.431639  0.566920 -1.289439  0.626914    c1
99  0.685915 -0.723009 -0.168497  1.630057  1.587378    c2

[100 rows x 6 columns]

班级比例相同

【问题讨论】:

  • @Wanderer 是的,上面的输出就是这样创建的,但这并不能确保类比例相等。
  • @dathbaba 实际上是这样,如果您设置“权重”相同,那么选择它们的概率将相同 = 相等的班级比例
  • 不,班级分布不一样, df.groupby('class').size() 证实了这一点。相等的类比例意味着每个类有 25 行

标签: python python-3.x pandas dataframe numpy


【解决方案1】:

这应该可以完成工作

classes = ['c1','c2','c3','c4']
df = pd.DataFrame(np.random.randn(100, 5), columns = list("abcde"))

classes = np.repeat(classes, df.shape[0]/len(classes))
np.random.shuffle(classes)
df['class'] = classes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多