首页 > 解决方案 > 在 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 循环来获取每一行数据帧,但我发现很难获得去年的数据,因为它没有排序。

标签: pythonpandasdataframe

解决方案


首先sort_valuesYear使用 进行计算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

推荐阅读