熊猫在两个具有相同列的数据帧中减去值创建新的数据帧来存储结果

时间:2021-06-10 22:11:44

标签: python pandas dataframe

我正在尝试创建一个新的数据帧 new_df,其中包含一个新列,其中包含减去 2 个单独数据帧中相同列的值的差异:df1 df2

我曾尝试使用代码 new_df.loc['difference'] = df1.loc['s_values'] - df2.loc['s_values'] 但我无法达到我的结果。

哪里df1 =

                     stats  s_values
gender year               
women  2007         height   40
       2007  cigarette use   31

df2 =

                     stats  s_values
gender year               
Men    2007         height   10
       2007  cigarette use   11

达到预期的输出(我不想包含 gender 索引)

new_df =

                stats  difference
   year               
   2007         height  30
   2007  cigarette use  20

2 个答案:

答案 0 :(得分:1)

new_df = pd.DataFrame()
new_df["year"] = df1["year"]
new_df["stats"] = df1["stats"]

for i, (val1, val2) in enumerate(zip(df1["s_values"],df2["s_values"])):
        new_df.at[i,"difference"] = val1-val2

答案 1 :(得分:1)

你可以试试这个(完整的例子):

输入:

import pandas as pd

df1 = pd.DataFrame({'gender': {0: 'woman', 1: 'woman'},
 'year': {0: 2007, 1: 2007},
 'stats': {0: 'height', 1: 'cigarette use'},
 's_values': {0: 40, 1: 31}})

df2 = pd.DataFrame({'gender': {0: 'men', 1: 'men'},
 'year': {0: 2007, 1: 2007},
 'stats': {0: 'height', 1: 'cigarette use'},
 's_values': {0: 10, 1: 11}})

代码:

df = pd.concat([df1,df2], ignore_index=True)
df['s_values'] = df.groupby(['year', 'stats'])['s_values'].diff().abs()
df.dropna(subset=['s_values']).drop('gender', axis=1)

输出:

   year          stats  s_values
2  2007         height      30.0
3  2007  cigarette use      20.0

注意:

如果两个数据帧的结构完全相同,则它甚至更短:

df1.drop('gender', axis=1).assign(s_values=df1['s_values'] - df2['s_values'])
相关问题