Pandas DataFrame:一列中的值基於另一列中先前的值,第三列中的相同值

馬克帕蘭

我有一個這樣的數據框:

df = pd.DataFrame({
    'ref1': [1,1,3,7,7],
    'ref2': [1,2,1,1,2],
    'value': [1,2,3,5,6],
})

df

    ref1    ref2    value
0   1       1       1
1   1       2       2
2   3       1       3
3   7       1       5
4   7       2       6

我想添加列new_value並獲得這個:

    ref1    ref2    value   new_value   my_comment
0   1       1       1       NaN         no prev ref1
1   1       2       2       NaN         no prev ref1
2   3       1       3       1.0 
3   7       1       5       3.0 
4   7       2       6       NaN         no same ref2 @ ref1==3

遵循這些規則:

  1. new_valuevalue為同ref2和以前的ref1(像一個有序列表[1,3,7]),否則
  2. NaN
廣黃

鑑於1, 3, 7按順序排列,您可以旋轉,移位,堆疊回來以獲得移位的值,然後合併:

df.merge(df.pivot(index='ref1', columns='ref2', values='value')
           .shift().stack().reset_index(name='new_value'),
         on=['ref1','ref2'], how='left'
)

輸出:

   ref1  ref2  value  new_value
0     1     1      1        NaN
1     1     2      2        NaN
2     3     1      3        1.0
3     7     1      5        3.0
4     7     2      6        NaN

注意如果有重複的ref1, ref2pivot將失敗。在這種情況下,您要枚舉對:

df.merge(df.assign(enum=df.groupby(['ref1','ref2']).cumcount())
           .pivot(index=['enum','ref1'], columns='ref2', values='value')
           .shift().stack()
           .reset_index(level='enum', drop=True)
           .reset_index(name='new_value'),
         on=['ref1','ref2'], how='left'
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用另一列中的相同行值替换pandas dataframe列中的值

从第三列为1的另一列中的最后一个值创建pandas df列

从 Pandas Dataframe 中选择一列中具有相同值而另一列中仅丢失的行

使用先前计算的值(来自同一列)和来自 Pandas Dataframe 中另一列的值计算值

Python Pandas DataFrame检查一列的值是否在另一列表中

用另一列Pandas DataFrame替换一列中的值

Pandas - 根据后一列中是否存在值过滤一列中具有相同值和另一列中多个值的行

pandas groupby并更新一列中的值大于另一列中的值的总和

Python Pandas-基于另一列中先前值的新列

pandas - 根据另一列更改列中的值

如果另一列中的值為空,則基於 2 列刪除重複項 - Pandas

Pandas DataFrame:根據另一列中的 von 值操作一列中的值

Pandas / Python:根据另一列中的值设置一列的值

在 Pandas 中创建一列,计算另一列中唯一值的数量

从 Pandas Dataframe 中查找列中的唯一值,并查看这些值是否在另一列中具有相同的值

通过匹配Pandas DataFrame中另一列中的值来区分行值

Pandas groupby:根据另一列中的值更改一列中的值

替换另一列中的缺失值-Pandas

如果另一列的值在pandas数据框中相同,如何减去2列

Pandas 基于另一列 python 获取一列中的唯一值

Pandas-Lambda-列表中的值以及另一列中的值(列表中的值)

根据Pandas中另一列的值范围汇总一列的内容

根据另一列(Python,Pandas)中的值删除一列的重复项

根据另一列中的值填充一列-Pandas

Pandas:重新排序基于另一列创建的组中一列中的值

Pandas - 通过在另一列中查找一列的值来创建一列

使用同一列中与另一列中具有匹配值的值填充Pandas DataFrame中的空值

有效地将一列中的值替换为另一列Pandas DataFrame

将行从一列移动到另一列以及pandas DataFrame中的相应值