两个分类变量的笛卡尔积

3

假设有一个DataFrame,除了其他变量外,还有两个分类变量,一个有child young mature old类别,另一个有male female类别。

如何系统地创建一个新列'Sex_Age',其中包含male_child, female_child, male_young, female_young, male_mature, female_mature, male_old, female_old这些类别?

有两种情况:

  1. 我不想在DataFrame中真正添加这个新的分类变量,只想利用它的概念,例如画出有八组点的jitter plot

  2. 我想将这个新的分类变量添加到我的DataFrame中。

import pandas as pd
df = pd.DataFrame({'Sex':['male', 'female',\
         'male', 'male', 'male', 'female', 'male',\
        'male', 'female'], 'Age':['child', 'old', 'mature',\
        'young', 'young', 'mature', 'child', 'child', 'child'],
                  'HairLength':[2,30,8,15,9,35,3,5,6]})
df

情况1:我想在一个图中用8个点分别对应8种情况:male_child,female_mature等,针对'HairLength'绘制抖动图,并且不想要新列。

情况2:我想向我的DataFrame添加一个'Sex_Age'列,并填充真实数据,例如male_child等。


1
请分享一个最小、完整和可验证的示例。另外,您能否澄清一下:“我不想将这个新的分类变量真正添加到我的数据框中”,但是“我想将这个新的分类变量添加到我的数据框中”? - yatu
1
我按照你说的做了,@yatu。 - moshtaba
1个回答

0

我的示例DataFrame是:

df = pd.DataFrame({'A':['male', 'female', 'male'], 'B':['one', 'two', 'three']})

你可以使用 pandas 的 get_dummies 函数:

pd.get_dummies(df, columns=['A', 'B'])

输出将是:


    A_female    A_male  B_one   B_three B_two
0          0         1      1         0     0
1          1         0      0         0     1
2          0         1      0         1     0

而且你可以用它来绘图,就像这样(但它不是抖动图):

pd.get_dummies(df, columns=['A', 'B']).plot(kind='bar')

或者将其与您的DataFrameWriter连接起来:

df = df.join(pd.get_dummies(df, columns=['A', 'B']))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接