Pandas 如何生成新的数据帧?

Pandas 如何生成新的数据帧?,pandas,dataframe,Pandas,Dataframe,我在下面有一个数据框: df = pd.DataFrame({"p1" : [2,3,5], "p2" : [2,3,5], "s1": [10,20,30], "s2": [5,-2, 7]}) df 我想得到一个新的数据帧,比如df_new。df_new将具有与df相同的列标签。两个数据帧的p1和p2值将相同,但对于df_new,列值s1和s2将使用以下公式从df生成: s1=(s1*p1/p2)和s2=(s

我在下面有一个数据框:

df = pd.DataFrame({"p1" : [2,3,5], "p2" : [2,3,5], "s1": [10,20,30], "s2": [5,-2, 7]})
df

我想得到一个新的数据帧,比如df_new。df_new将具有与df相同的列标签。两个数据帧的p1和p2值将相同,但对于df_new,列值s1和s2将使用以下公式从df生成:

s1=(s1*p1/p2)和s2=(s2*p1/p2)

用于:

编辑:一个想法是与
s
子字符串一起使用

cols = df.filter(like='s').columns
#or if starts columns names by s
#cols = df.filter(regex='^s').columns
df[cols] = df[cols].mul(df.p1.div(df.p2), axis=0)
或选择最后N列,例如,此处2:


使用:

或创建新列,如:

df.s1 = (df.s1 * df.p1 / df.p2) 
df.s2 = (df.s2 * df.p1 / df.p2) 
print (df)
   p1  p2    s1   s2
0   2   2  10.0  5.0
1   3   3  20.0 -2.0
2   5   5  30.0  7.0

如果我从s1到s50有50列呢?有什么快捷方式吗?@burhancigdem-是的,添加了
EDIT
来回答.df.iloc[:,-2:]=df.iloc[:,-2:].mul(df.p1/df.p2,axis=0)代替df.iloc[:,-2:]=df.iloc[:,-2:].div(df.p1/df.p2,axis=0)。谢谢
df.iloc[:, -2:] = df.iloc[:, -2:].mul(df.p1 / df.p2, axis=0)
df = df.assign(s1 = (df.s1 * df.p1 / df.p2),
               s2 = (df.s2 * df.p1 / df.p2))
print (df)

   p1  p2    s1   s2
0   2   2  10.0  5.0
1   3   3  20.0 -2.0
2   5   5  30.0  7.0
df.s1 = (df.s1 * df.p1 / df.p2) 
df.s2 = (df.s2 * df.p1 / df.p2) 
print (df)
   p1  p2    s1   s2
0   2   2  10.0  5.0
1   3   3  20.0 -2.0
2   5   5  30.0  7.0