python - 在 pandas 数据框中创建新列取决于同一数据框中的其他列但不同的行
问题描述
我是蟒蛇的新手。
我遇到了一个问题,我需要在数据框中创建一个新列,这取决于同一数据框中的其他列但不同的行。
df = pd.DataFrame({"Year":[2011,2014,2012,2013],"Value1":[10,40,20,30],"Value2":[10,100,30,60]})
df
Year Value1 Value2 Product
0 2011 10 10 1
1 2014 40 100 1
2 2012 20 30 1
3 2013 30 60 1
4 2011 10 10 2
5 2014 40 100 2
6 2012 20 30 2
7 2013 30 60 2
8 2011 10 10 3
9 2014 40 100 3
10 2012 20 30 3
11 2013 30 60 3
我想根据今年的值和去年创建一个新列,新列 value3 应该成为这个和去年的 value1 和 value2 之间差异的商,例如,2012 年行的 value3 应该由 ( 30-10)/(20-10) = 2。
所以我预期的新数据框应该是这样的:
Year Value1 Value2 Product Value3
0 2011 10 10 1 NaN
1 2014 40 100 1 4.0
2 2012 20 30 1 2.0
3 2013 30 60 1 3.0
4 2011 10 10 2 NaN
5 2014 40 100 2 4.0
6 2012 20 30 2 2.0
7 2013 30 60 2 3.0
8 2011 10 10 3 NaN
9 2014 40 100 3 4.0
10 2012 20 30 3 2.0
11 2013 30 60 3 3.0
有人能帮我吗?
我尝试使用 for 循环来获取每一行数据帧,但我发现很难获得去年的数据,因为它没有排序。
解决方案
首先sort_values
,Year
使用 进行计算shift
,然后sort_index
保留原始顺序:
print (df.sort_values("Year")
.assign(Value3=(df["Value2"]-df["Value2"].shift())/(df["Value1"]-df["Value1"].shift()))
.sort_index())
Year Value1 Value2 Value3
0 2011 10 10 NaN
1 2014 40 100 4.0
2 2012 20 30 2.0
3 2013 30 60 3.0
推荐阅读
- xml - 无法将文件的 XML 字符串发送到 get rest 服务
- android - 圆角 MaterialCardView 的共享元素过渡
- c# - 用户或角色授权检查
- uwp - 应用程序不允许 Xbox Live 创意者计划
- reactjs - 如何将标记添加到使用 geolocate.trigger() 找到的坐标?
- python - Tweepy stream.filter 文档
- r - 如何使交叉产品更快
- java - Squirrel SQL 在哪里存储其自动更正条目?
- powershell - Powershell 提取字符串以
- python - 将 pandas 数据框转换为数据框 dask 时出现“未定义基本名称”错误