Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 由公司根据环境中的条件创建虚拟对象_Python_Pandas - Fatal编程技术网

Python 由公司根据环境中的条件创建虚拟对象

Python 由公司根据环境中的条件创建虚拟对象,python,pandas,Python,Pandas,我有一个熊猫数据框,看起来像这样: data = {"firm": [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4], "year" : [2000, 2001, 2002, 2003, 1990, 1991, 1992, 1993, 1994, 2010, 2011, 2012, 2005, 2006, 2007, 2008, 2009, 2010], "var" : [3,

我有一个熊猫数据框,看起来像这样:

data = {"firm": [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4], "year" : [2000, 2001, 2002, 2003, 1990, 1991, 1992, 1993, 1994, 2010, 2011, 2012, 2005, 2006, 2007, 2008, 2009, 2010], "var" : [3, 2, 1, 0.5, 5, 3, 2, 0.5, 0.5, 0.5, 0, 0, 8, 5, 3, 0.5, 0.5, 0.5]} 
df = pd.DataFrame(data) 
df
data = {"firm": [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4], "year" : [2000, 2001, 2002, 2003, 1990, 1991, 1992, 1993, 1994, 2010, 2011, 2012, 2005, 2006, 2007, 2008, 2009, 2010], "var" : [3, 2, 1, 0.5, 5, 3, 2, 0.5, 0.5, 0.5, 0, 0, 8, 5, 3, 0.5, 0.5, 0.5], "dummy" : [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1]} 
df = pd.DataFrame(data) 
df
我想为每个公司创建一个虚拟变量,条件如下:

当变量“var”连续两年等于或小于0.5时,“dummy”等于1,因此变量“dummy”如下所示:

data = {"firm": [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4], "year" : [2000, 2001, 2002, 2003, 1990, 1991, 1992, 1993, 1994, 2010, 2011, 2012, 2005, 2006, 2007, 2008, 2009, 2010], "var" : [3, 2, 1, 0.5, 5, 3, 2, 0.5, 0.5, 0.5, 0, 0, 8, 5, 3, 0.5, 0.5, 0.5]} 
df = pd.DataFrame(data) 
df
data = {"firm": [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4], "year" : [2000, 2001, 2002, 2003, 1990, 1991, 1992, 1993, 1994, 2010, 2011, 2012, 2005, 2006, 2007, 2008, 2009, 2010], "var" : [3, 2, 1, 0.5, 5, 3, 2, 0.5, 0.5, 0.5, 0, 0, 8, 5, 3, 0.5, 0.5, 0.5], "dummy" : [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1]} 
df = pd.DataFrame(data) 
df
做这件事最好的方法是什么?

让我们试试使用shift的groupby

让我们用shift试试groupby


你的要求几乎可以翻译成中文。 首先按公司分组,然后检查您的条件是否符合申请条件。 你可以通过轮班获得下一年


你的要求几乎可以翻译成中文。 首先按公司分组,然后检查您的条件是否符合申请条件。 你可以通过轮班获得下一年


您可以移动、检查阈值并与原始系列上的检查相结合:

df.groupby('firm')['var'].shift().le(.5) & df['var'].le(.5)
这应该比groupby.apply稍微快一点

另一种方法是滚动,在需要检查几年的情况下效果更好:

输出:

0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8      True
9     False
10     True
11     True
12    False
13    False
14    False
15    False
16     True
17     True
Name: var, dtype: bool

您可以移动、检查阈值并与原始系列上的检查相结合:

df.groupby('firm')['var'].shift().le(.5) & df['var'].le(.5)
这应该比groupby.apply稍微快一点

另一种方法是滚动,在需要检查几年的情况下效果更好:

输出:

0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8      True
9     False
10     True
11     True
12    False
13    False
14    False
15    False
16     True
17     True
Name: var, dtype: bool