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