Python 将两个数据帧的元素相乘,创建新的数据帧
我有以下数据帧,称为“key”和“yr_df”: 我想用“key”中的每个元素乘以“yr_df”中的每个值。也就是说,将DEF01、DEF02、DEF03等乘以2010年的值(40301000),然后乘以2011年的值(39509000)等。这些结果将存储在具有以下结构的新数据帧中:Python 将两个数据帧的元素相乘,创建新的数据帧,python,pandas,Python,Pandas,我有以下数据帧,称为“key”和“yr_df”: 我想用“key”中的每个元素乘以“yr_df”中的每个值。也就是说,将DEF01、DEF02、DEF03等乘以2010年的值(40301000),然后乘以2011年的值(39509000)等。这些结果将存储在具有以下结构的新数据帧中: 2010 2011 2012... NUTS_ID DEF01 DEF02 DEF03 ... 最好的方法是什么?提前感谢您的帮助。使用numpy广播,同时将系列转换为numpy阵列: a
2010 2011 2012...
NUTS_ID
DEF01
DEF02
DEF03
...
最好的方法是什么?提前感谢您的帮助。使用numpy广播,同时将
系列
转换为numpy阵列:
a = key['No_Households'].to_numpy()[:, None] * yr_df.iloc[0].to_numpy()
df = pd.DataFrame(a, index=key.index, columns=yr_df.columns)
print (df)
2010 2011 2012 2017 2018 2019
DEF01 47998.491 47055.219 47291.037 49193.064 49281.198 49433.646
DEF02 137184.604 134488.636 135162.628 140598.816 140850.712 141286.424
DEF03 116993.803 114694.627 115269.421 119905.512 120120.334 120491.918
DEF04 40663.709 39864.581 40064.363 41675.736 41750.402 41879.554
DEF05 66133.941 64834.269 65159.187 67779.864 67901.298 68111.346
DEG0I 59161.868 57999.212 58289.876 60634.272 60742.904 60930.808
DEG0J 41993.642 41168.378 41374.694 43038.768 43115.876 43249.252
DEG0K 42799.662 41958.558 42168.834 43864.848 43943.436 44079.372
DEG0L 54728.758 53653.222 53922.106 56090.832 56191.324 56365.148
DEG0M 51947.989 50927.101 51182.323 53240.856 53336.242 53501.234
将numpy广播与两个
系列
转换为numpy阵列一起使用:
a = key['No_Households'].to_numpy()[:, None] * yr_df.iloc[0].to_numpy()
df = pd.DataFrame(a, index=key.index, columns=yr_df.columns)
print (df)
2010 2011 2012 2017 2018 2019
DEF01 47998.491 47055.219 47291.037 49193.064 49281.198 49433.646
DEF02 137184.604 134488.636 135162.628 140598.816 140850.712 141286.424
DEF03 116993.803 114694.627 115269.421 119905.512 120120.334 120491.918
DEF04 40663.709 39864.581 40064.363 41675.736 41750.402 41879.554
DEF05 66133.941 64834.269 65159.187 67779.864 67901.298 68111.346
DEG0I 59161.868 57999.212 58289.876 60634.272 60742.904 60930.808
DEG0J 41993.642 41168.378 41374.694 43038.768 43115.876 43249.252
DEG0K 42799.662 41958.558 42168.834 43864.848 43943.436 44079.372
DEG0L 54728.758 53653.222 53922.106 56090.832 56191.324 56365.148
DEG0M 51947.989 50927.101 51182.323 53240.856 53336.242 53501.234
取两个矩阵的点积:
导入熊猫
随机输入
#创建一些测试数据
df_1=pandas.DataFrame([{“NUTS_ID”:f“DEF{i}”,“No_houses”:random.random()}表示范围(400)]内的i。设置_索引(“NUTS_ID”)
df_2=pandas.DataFrame([{“year”:year,“value”:random.randint(39707000,41506000)}用于范围内的年份(2010200)])。设置_索引(“year”).T
#将数据帧转换为numpy数组
df_1_numpy=df_1.to_numpy()
df_2_numpy=df_2.to_numpy()
#取两个矩阵的乘积
product=df_1_numpy.dot(df_2_numpy)
#重新创建数据帧
数据帧(产品,列=df_2.columns,索引=df_1.index)
打印(df)
输出:
2010年2011年2013年2014年\
坚果
DEF0 1.842382e+07 1.790878e+07 1.776382e+07 1.820333e+07 1.836708e+07
DEF1 3.463805e+07 3.366974e+07 3.339721e+07 3.422352e+07 3.453139e+07
DEF2 2.448049e+07 2.379614e+07 2.360353e+07 2.418752e+07 2.440511e+07
DEF3 1.909173e+06 1.855802e+06 1.840781e+06 1.886325e+06 1.903294e+06
DEF4 2.403505e+07 2.336315e+07 2.317404e+07 2.374741e+07 2.396104e+07
... ... ... ... ... ...
DEF395 8.322933e+06 8.090264e+06 8.024780e+06 8.223327e+06 8.297304e+06
DEF396 7.356079e+06 7.150439e+06 7.092562e+06 7.268044e+06 7.333427e+06
DEF397 3.778848e+07 3.673210e+07 3.643478e+07 3.733624e+07 3.767212e+07
DEF398 6.353758e+06 6.176138e+06 6.126147e+06 6.277719e+06 6.334193e+06
DEF399 3.601888e+07 3.501197e+07 3.472857e+07 3.558782e+07 3.590797e+07
2015年2016年2017年2018年2019年
坚果
DEF0 1.774076e+07 1.852360e+07 1.835540e+07 1.822035e+07 1.831470e+07
DEF1 3.335387e+07 3.482565e+07 3.450942e+07 3.425552e+07 3.443291e+07
DEF2 2.357289e+07 2.461308e+07 2.438958e+07 2.421014e+07 2.433551e+07
DEF3 1.838392e+06 1.919513e+06 1.902083e+06 1.888089e+06 1.897866e+06
DEF4 2.314396e+07 2.416522e+07 2.394579e+07 2.376961e+07 2.389270e+07
... ... ... ... ... ...
DEF395 8.014365e+06 8.368009e+06 8.292024e+06 8.231016e+06 8.273640e+06
DEF396 7.083356e+06 7.395919e+06 7.328761e+06 7.274840e+06 7.312512e+06
DEF397 3.638749e+07 3.799314e+07 3.764815e+07 3.737115e+07 3.756468e+07
DEF398 6.118196e+06 6.388169e+06 6.330162e+06 6.283589e+06 6.316128e+06
DEF399 3.468350e+07 3.621395e+07 3.588512e+07 3.562109e+07 3.580556e+07
[400行x 10列]
取两个矩阵的点积:
导入熊猫
随机输入
#创建一些测试数据
df_1=pandas.DataFrame([{“NUTS_ID”:f“DEF{i}”,“No_houses”:random.random()}表示范围(400)]内的i。设置_索引(“NUTS_ID”)
df_2=pandas.DataFrame([{“year”:year,“value”:random.randint(39707000,41506000)}用于范围内的年份(2010200)])。设置_索引(“year”).T
#将数据帧转换为numpy数组
df_1_numpy=df_1.to_numpy()
df_2_numpy=df_2.to_numpy()
#取两个矩阵的乘积
product=df_1_numpy.dot(df_2_numpy)
#重新创建数据帧
数据帧(产品,列=df_2.columns,索引=df_1.index)
打印(df)
输出:
2010年2011年2013年2014年\
坚果
DEF0 1.842382e+07 1.790878e+07 1.776382e+07 1.820333e+07 1.836708e+07
DEF1 3.463805e+07 3.366974e+07 3.339721e+07 3.422352e+07 3.453139e+07
DEF2 2.448049e+07 2.379614e+07 2.360353e+07 2.418752e+07 2.440511e+07
DEF3 1.909173e+06 1.855802e+06 1.840781e+06 1.886325e+06 1.903294e+06
DEF4 2.403505e+07 2.336315e+07 2.317404e+07 2.374741e+07 2.396104e+07
... ... ... ... ... ...
DEF395 8.322933e+06 8.090264e+06 8.024780e+06 8.223327e+06 8.297304e+06
DEF396 7.356079e+06 7.150439e+06 7.092562e+06 7.268044e+06 7.333427e+06
DEF397 3.778848e+07 3.673210e+07 3.643478e+07 3.733624e+07 3.767212e+07
DEF398 6.353758e+06 6.176138e+06 6.126147e+06 6.277719e+06 6.334193e+06
DEF399 3.601888e+07 3.501197e+07 3.472857e+07 3.558782e+07 3.590797e+07
2015年2016年2017年2018年2019年
坚果
DEF0 1.774076e+07 1.852360e+07 1.835540e+07 1.822035e+07 1.831470e+07
DEF1 3.335387e+07 3.482565e+07 3.450942e+07 3.425552e+07 3.443291e+07
DEF2 2.357289e+07 2.461308e+07 2.438958e+07 2.421014e+07 2.433551e+07
DEF3 1.838392e+06 1.919513e+06 1.902083e+06 1.888089e+06 1.897866e+06
DEF4 2.314396e+07 2.416522e+07 2.394579e+07 2.376961e+07 2.389270e+07
... ... ... ... ... ...
DEF395 8.014365e+06 8.368009e+06 8.292024e+06 8.231016e+06 8.273640e+06
DEF396 7.083356e+06 7.395919e+06 7.328761e+06 7.274840e+06 7.312512e+06