Python 基于pandas中的条件创建虚拟变量

Python 基于pandas中的条件创建虚拟变量,python,pandas,dummy-variable,Python,Pandas,Dummy Variable,我有这样一个数据帧: date sales company country 16/03/2012 3000 H&M US 13/04/2012 2300 H&M US 26/03/2012 1230 H&M FR 13/04/2012 1300 H&M FR 23/03/2012 22

我有这样一个数据帧:

date           sales      company    country 
16/03/2012     3000       H&M        US
13/04/2012     2300       H&M        US
26/03/2012     1230       H&M        FR
13/04/2012     1300       H&M        FR
23/03/2012     2230       H&M        IT
19/04/2012     1100       H&M        IT
16/03/2012     3000       ABC        US
13/04/2012     2300       ABC        US
26/03/2012     100        ABC        FR
13/04/2012     60         ABC        FR
23/03/2012     435        ABC        IT
19/04/2012     300        ABC        IT
 date           sales      company    country   international
    16/03/2012     3000       H&M        US         1
    13/04/2012     2300       H&M        US         1
    26/03/2012     1230       H&M        FR         1
    13/04/2012     1300       H&M        FR         1
    23/03/2012     2230       H&M        IT         1
    19/04/2012     1100       H&M        IT         1
    16/03/2012     3000       ABC        US         0
    13/04/2012     2300       ABC        US         0
    26/03/2012     100        ABC        FR         0
    13/04/2012     60         ABC        FR         0
    23/03/2012     435        ABC        IT         0
    19/04/2012     300        ABC        IT         0
我想定义一个标准:如果一家公司(avarage)的销售额中只有不到50%来自同一个国家,则该公司被视为国际公司。我想创建一个新列,如果它是国际列,则它的值为1,否则为0。最终输出应如下所示:

date           sales      company    country 
16/03/2012     3000       H&M        US
13/04/2012     2300       H&M        US
26/03/2012     1230       H&M        FR
13/04/2012     1300       H&M        FR
23/03/2012     2230       H&M        IT
19/04/2012     1100       H&M        IT
16/03/2012     3000       ABC        US
13/04/2012     2300       ABC        US
26/03/2012     100        ABC        FR
13/04/2012     60         ABC        FR
23/03/2012     435        ABC        IT
19/04/2012     300        ABC        IT
 date           sales      company    country   international
    16/03/2012     3000       H&M        US         1
    13/04/2012     2300       H&M        US         1
    26/03/2012     1230       H&M        FR         1
    13/04/2012     1300       H&M        FR         1
    23/03/2012     2230       H&M        IT         1
    19/04/2012     1100       H&M        IT         1
    16/03/2012     3000       ABC        US         0
    13/04/2012     2300       ABC        US         0
    26/03/2012     100        ABC        FR         0
    13/04/2012     60         ABC        FR         0
    23/03/2012     435        ABC        IT         0
    19/04/2012     300        ABC        IT         0
我怎么能做到? 注意:数据集中可能缺少销售值,我怎么能说忽略这些值呢?

用于平均值,使用聚合

all
对它们和groupby进行压缩,以检查所有值是否返回
True
S:

s2 = df.groupby('company')['sales'].transform('mean') / 2
print (s2)
0     930.00
1     930.00
2     930.00
3     930.00
4     930.00
5     930.00
6     516.25
7     516.25
8     516.25
9     516.25
10    516.25
11    516.25
Name: sales, dtype: float64

s1 = df.groupby(['company', 'country'])['sales'].transform('mean')
print (s1)
0     2650.0
1     2650.0
2     1265.0
3     1265.0
4     1665.0
5     1665.0
6     2650.0
7     2650.0
8       80.0
9       80.0
10     367.5
11     367.5
Name: sales, dtype: float64


我也有过类似的经历,但在你们得到回应之前,我不可能这么做。不过,我会将df2和df1更改为s1和s2,因为它们是串联的,而不是数据帧+1vaaw伟大的答案:)