python - 如何在 pandas 中使用 groupby 添加功能?
问题描述
我有这种表:
ID1 = [2002070, 2002070,2002070, 2002070, 2002070, 2002740,2002740,2002740,2003010,2003010]
ID2 = [2002070, 2002070,200800, 200800, 200800, 300540,300540,300540,2002740,2002740]
ID3 = [2002740, 2002740,2002740, 2002070, 2002070, 2002070,3000540,3000540,5001020,5001020]
Value1 = [4.5, 4.2, 3.7, 4.8, 4.4, 4.6, 3.3, 5.3, 3.8 ,2.6]
Value2 = [7.2, 6.4, 10, 2.3, 1.5, 4.7, 9.5, 4.2, 4.6 ,1.5]
Value3 = [8.4, 8.4, 8.4, 7.4, 7.4, 7.4, 5.3, 5.3, 6.1 ,6.1]
date1 = ['2005-12-07', '2008-05-14', '2008-10-27', '2009-04-20', '2012-03-01', '2013-11-28','2012-08-13', '2011-07-27', '2011-11-02', '2011-08-04']
date2 = ['2003-10-10', '2005-12-07', '2004-05-14', '2011-06-03', '2015-07-05', '2013-04-22','2002-01-14', '2005-04-12', '2011-06-26', '2004-10-18']
date3 = ['2010-10-22', '2012-03-01', '2013-11-28', '2005-12-07', '2012-03-01', '2009-04-20','2012-10-02', '2008-01-30', '2006-08-09', '2006-02-12']
date1=pd.to_datetime(date1)
date2=pd.to_datetime(date2)
date3=pd.to_datetime(date3)
df1=pd.DataFrame({'ID': ID1, 'Value1': Value1, 'Date1':date1}).sort_values('Date1')
df2=pd.DataFrame({'ID': ID2, 'Value2': Value2, 'Date2':date2}).sort_values('Date2')
df3=pd.DataFrame({'ID': ID3, 'Value3': Value3, 'Date3':date3}).sort_values('Date3')
ID Value1 Date1 ID Value2 Date2 ID Value3 Date3
0 2002070 4.5 2005-12-07 2002070 7.2 2003-10-10 2002740 8.4 2010-10-22
1 2002070 4.2 2008-05-14 2002070 6.4 2005-12-07 2002740 8.4 2012-03-01
2 2002070 3.7 2008-10-27 200800 10 2004-05-14 2002740 8.4 2013-11-28
3 2002070 4.8 2009-04-20 200800 2.3 2011-06-03 2002070 7.4 2005-12-07
4 2002070 4.4 2012-03-01 200800 1.5 2015-07-05 2002070 7.4 2012-03-01
5 2002740 4.6 2013-11-28 300540 4.7 2013-04-22 2002070 7.4 2009-04-20
6 2002740 3.3 2012-08-13 300540 9.5 2002-01-14 3000540 5.3 2012-10-02
7 2002740 5.3 2011-07-27 300540 4.2 2005-04-12 3000540 5.3 2008-01-30
8 2003010 3.8 2011-11-02 2002740 4.6 2011-06-26 5001020 6.1 2006-08-09
9 2003010 2.6 2011-08-04 2002740 1.5 2004-10-18 5001020 6.1 2006-02-12
我想做这些步骤:
- 比较 ID1、ID2 和 ID3 是否相等
- 如果 date1 和 date2 不同并且 value2 和 value3(对于任何 date3,但对于 ID3=ID2=ID1)存在且 value1 不存在
- 然后计算 ID3=ID2=ID1(对于任何 date3,date3 不相关)value1_new=value2/(value3^2) 并为 value1_new 设置 date1_new=date2。
例如,考虑 ID=2002070,唯一与 Date1 不同的 Date2 是 Date2.iloc[0],所以我将得到 Value1_new=value2.iloc[0]/(value3.iloc[3]^2) 和 Date1_new1=Date2。 iloc[0]。然后我会将这个新值附加到 pedices 1 指示的列中。对于 Date2.iloc[1],我将保留 Value1.iloc[0],所以我什么都不做
可能我应该使用 groupby('ID'),但是我不知道如何将最后两个步骤集成到 groupby 函数中。你知道一些熊猫功能来做这些吗?或者我应该使用 for 循环?
解决方案
推荐阅读
- javascript - PHP to HTML:使用动态内容管理水平列表
- asp.net-mvc - ASP.NET MVC 区域返回空白视图
- jquery - asp.net Core 2.1 MVC 验证器不工作
- c# - 为什么位图保存为 PNG
- android - Dagger2 注入单元测试为空
- python - b'BODY[] 中的方括号没有内容,我的电子邮件正文为无。这2个有联系吗?
- corda - 如何映射一个相当复杂的业务流程,如订单到现金到 Corda 流
- c# - Build server of an old ASP.NET 4 application fails building new C# 7, but it works in development
- r - 绘制一个数据框列表,每个数据框有 4 个变量
- javascript - 视频结束后如何启用按钮。?