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]}
df = pd.DataFrame(data)
我想为每家公司的最后一年创建一个等于 1 的虚拟变量,否则为零,如下所示:
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], "dummy" : [0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1]}
df = pd.DataFrame(data)
我想知道最好的方法是什么。
解决方案
Series.duplicated
与keep='last'
参数和一起使用numpy.where
:
df['dummy1'] = np.where(df['firm'].duplicated(keep='last'), 0, 1)
或使用转换True,False
为1,0
bySeries.view
或反转掩码Series.astype
:
df['dummy1'] = (~df['firm'].duplicated(keep='last')).view('i1')
#alternative
#df['dummy1'] = (~df['firm'].duplicated(keep='last')).astype('int')
print (df)
firm year dummy dummy1
0 1 2000 0 0
1 1 2001 0 0
2 1 2002 0 0
3 1 2003 1 1
4 2 1990 0 0
5 2 1991 0 0
6 2 1992 0 0
7 2 1993 0 0
8 2 1994 1 1
9 3 2010 0 0
10 3 2011 0 0
11 3 2012 1 1
12 4 2005 0 0
13 4 2006 0 0
14 4 2007 0 0
15 4 2008 0 0
16 4 2009 0 0
17 4 2010 1 1
推荐阅读
- php - 带有负双精度值的 PHP MySQL QUERY
- excel - 将特定数据复制到模板并将其保存为 TXT 文件的宏
- php - 我的 laravel 应用程序没有选择正确的路线
- intellij-idea - InteliJ 中的栏的名称是什么,位于编辑器窗口的底部
- firebase - Firebase 模拟器触发器不显示任何记录的输出
- python - flask + sqlAlchemy COUNT、AVG 和 SUM 在一个查询中
- docker - 如何在 docker Portainer 容器中创建自己的应用程序模板?
- excel - 如何使用在访问表单上创建/输入的动态路径导入 Excel 数据
- blazor - 在我的 Blazor 项目中永远不会调用 API 控制器的构造函数
- node.js - 使用 Google-Auth-Library 将服务帐户连接到 Admob API 时出现问题