Python 将多列乘以多列
我有这样一个数据框:Python 将多列乘以多列,python,pandas,database,Python,Pandas,Database,我有这样一个数据框: ivol Front Face Back Face Left Face Right Face Front jvol Back jvol Left jvol Right jvol row col 99 49 5
ivol Front Face Back Face Left Face Right Face Front jvol Back jvol Left jvol Right jvol
row col
99 49 5792 1 1 1 0 5734 5850 5791 5793
50 5793 1 1 0 0 5735 5851 5792 5794
51 5794 1 1 0 0 5736 5852 5793 5795
52 5795 1 1 0 0 5737 5853 5794 5796
ivol Front Face Back Face Left Face Right Face Front jvol Back jvol Left jvol Right jvol
row col
99 49 5792 1 1 1 0 5734 5850 5791 0
50 5793 1 1 0 0 5735 5851 0 0
51 5794 1 1 0 0 5736 5852 0 0
52 5795 1 1 0 0 5737 5853 0 0
我需要将某些列(xxx Face
columns)乘以xxx jvol
columns)并将结果重写到位(xxx jvol
column)。结果应该是这样的:
ivol Front Face Back Face Left Face Right Face Front jvol Back jvol Left jvol Right jvol
row col
99 49 5792 1 1 1 0 5734 5850 5791 5793
50 5793 1 1 0 0 5735 5851 5792 5794
51 5794 1 1 0 0 5736 5852 5793 5795
52 5795 1 1 0 0 5737 5853 5794 5796
ivol Front Face Back Face Left Face Right Face Front jvol Back jvol Left jvol Right jvol
row col
99 49 5792 1 1 1 0 5734 5850 5791 0
50 5793 1 1 0 0 5735 5851 0 0
51 5794 1 1 0 0 5736 5852 0 0
52 5795 1 1 0 0 5737 5853 0 0
我可以这样做:
df['Front jvol'] = df['Front Face'] * df['Front jvol']
df['Back jvol'] = df['Back Face'] * df['Back jvol']
df['Left jvol'] = df['Left Face'] * df['Left jvol']
df['Right jvol'] = df['Right Face'] * df['Right jvol']
但是,它给出了
SettingWithCopyWarning:试图在数据帧的切片副本上设置一个值。尝试使用.loc[row\u indexer,col\u indexer]=值来代替警告,我不适合使用它。尝试使用dataframe.assign
df.assign(
front_jvol=df['Front Face'] * df['Front jvol'],
back_jvol=df['Back Face'] * df['Back jvol'],
left_jvol=df['Left Face'] * df['Left jvol'],
right_jvol=df['Right Face'] * df['Right jvol']
)
使用dataframe进行尝试。分配
df.assign(
front_jvol=df['Front Face'] * df['Front jvol'],
back_jvol=df['Back Face'] * df['Back jvol'],
left_jvol=df['Left Face'] * df['Left jvol'],
right_jvol=df['Right Face'] * df['Right jvol']
)
您可以使用字典理解,因为您的列有共同的前缀:
columns = ["Front", "Back", "Left", "Right"]
mapping = {f"{col} jvol": df[f"{col} Face"] * df[f"{col} jvol"]
for col in columns}
最终结果:
df.assign(**mapping)
您可以使用字典理解,因为您的列有共同的前缀:
columns = ["Front", "Back", "Left", "Right"]
mapping = {f"{col} jvol": df[f"{col} Face"] * df[f"{col} jvol"]
for col in columns}
最终结果:
df.assign(**mapping)
此解决方案创建新列(fron_jvol等)。如何将它们存储在现有列(Front jvol等)中?它返回一个新的dataframe对象,其中包含除新列之外的所有原始列,只需将它们重新分配给现有的df
有见地的建议。此解决方案创建新列(fron_jvol等)。如何将它们存储在现有列(Front jvol等)中?它返回一个新的dataframe对象,其中包含除新列之外的所有原始列,只需将它们重新分配给现有的df
深入建议。