Python Pandas 向 DataFrame 添加或减去用户定义的数字

Python Pandas Adding or Subtracting User Defined Numbers to DataFrame

我正在尝试修改从 excel 读取的数据框。我想修改 'Region1' 和 'Region2' 列,更具体地说,我想从 'Region1' 列中减去一个用户定义的数字,并向 'Region2' 添加一个用户定义的数字。我可以修改数据帧以便我可以同时执行这两个操作,即从 'Region1' 中减去 5 并将 5 添加到 'Region2'.

import pandas as pd
import numpy as np

df = pd.read_csv('C:\Users\blahblah\Desktop\testroi.bed', delimiter= '\t')

df[['Region1', 'Region2']]

Region1 Region2
0   25870184    25870282
1   25880407    25880560
2   25881345    25881468
3   25883638    25883763
4   25889129    25889212
... ... ...
432 107645314   107645443
433 107646702   107646854
434 107651377   107651481
435 107651648   107651661
436 107665889   107665965
437 rows × 2 columns

我可以为 'Region1' 和 'Region2' 创建新的 dfs 来做 adding/subtracting,但我想知道我是否可以用 1 行代码同时执行这两个操作在同一个数据帧上。所以基本上使用上面的数据框,'Region1' 的第 0 个索引将是 25870184 - 5 = 25870179 和 'Region2' 的 25870282 + 5 = 25870287。从所有列和行重复操作,即我知道我可以通过 df=df['Region1'] -5 进行操作,但我想知道我是否可以同时进行两个操作,即 df = df['Region1'] -5 , df['Region2'] + 5。我遇到的问题是在同一个数据帧上同时进行两个操作。

谢谢

您可以使用 apply.

同时修改所有值
df = pd.DataFrame([[0, 0], [1, 1], [2, 2]], columns=["Region1", "Region2"])

   Region1  Region2
0        0        0
1        1        1
2        2        2

number1, number2 = 1, 2 # User defined numbers

def adjust(row):
    row["Region1"] -= number1
    row["Region2"] += number2
    return row

df.apply(adjust, axis=1)

输出

   Region1  Region2
0       -1        2
1        0        3
2        1        4

但是,与简单地执行 2 个单独的操作相比,我看不出有任何优势:

df["Region1"] -= number1
df["Region2"] += number2
df

输出:

   Region1  Region2
0       -1        2
1        0        3
2        1        4

可以利用.assign()语句,如下:

df = df.assign(Region1=(df['Region1'] - 5), Region2=(df['Region2'] + 5))

结果:

print(df)

       Region1    Region2
0     25870179   25870287
1     25880402   25880565
2     25881340   25881473
3     25883633   25883768
4     25889124   25889217
432  107645309  107645448
433  107646697  107646859
434  107651372  107651486
435  107651643  107651666
436  107665884  107665970

最简单的(也是最快的,因为它是 inplace)是:

df[['Region1', 'Region2']] += [-5, 5]

>>> df[['Region1', 'Region2']]
       Region1    Region2
0     25870179   25870287
1     25880402   25880565
2     25881340   25881473
3     25883633   25883768
4     25889124   25889217
432  107645309  107645448
433  107646697  107646859
434  107651372  107651486
435  107651643  107651666
436  107665884  107665970