Pandas 循环到变量中添加后缀并转换原始列

Pandas loop into variables adding suffix and transforming original column

我想循环进入一些变量名和带有添加后缀“_plus”的等效列

#original dataset
raw_data = {'time': [2,1,4,2],
            'zone': [5,1,3,0],
           'time_plus': [5,6,2,3],
            'zone_plus': [0,9,6,5]}
df = pd.DataFrame(raw_data, columns = ['time','zone','time_plus','zone_plus'])
df

#desired dataset
df['time']=df['time']*df['time_plus']
df['zone']=df['zone']*df['zone_plus']
df

我想通过循环以更优雅的方式进行乘法运算,因为我有很多具有这种模式的变量:原始名称 * 带有 _plus 后缀的转换变量

类似或更好的东西


my_list=['time','zone']

for i in my_list:
    df[i]=df[i]*df[i+"_plus"]

raw_data = {'time': [2,1,4,2],
        'zone': [5,1,3,0],
       'time_plus': [5,6,2,3],
        'zone_plus': [0,9,6,5]}
df = pd.DataFrame(raw_data, columns = ['time','zone','time_plus','zone_plus'])

# Take every column that doesn't have a "_plus" suffix
cols = [i for i in list(df.columns) if "_plus" not in i]

# Calculate new columns
for col in cols:
    df[str(col+"_2")] = df[col]*df[str(col+"_plus")]

我决定创建带有“_2”后缀的新列,这样我们就不会弄乱原始数据。

尝试:

for c in df.filter(regex=r".*(?<!_plus)$", axis=1):
    df[c] *= df[c + "_plus"]

print(df)

打印:

   time  zone  time_plus  zone_plus
0    10     0          5          0
1     6     9          6          9
2     8    18          2          6
3     6     0          3          5

或者:

for c in df.columns:
    if not c.endswith("_plus"):
        df[c] *= df[c + "_plus"]
for c in df.columns:
    if f"{c}_plus" in df.columns:
        df[c] *= df[f"{c}_plus"]