我有两个数据框:
df1:
Produtos Jan Feb Mar Apr May Jun \
0 100 15884.0 8194.0 41070.0 8294.0 17308.0 18146.0
1 10057 0.0 0.0 0.0 24900.0 0.0 0.0
2 10058 0.0 0.0 0.0 30900.0 0.0 0.0
3 10236 11638.0 8450.0 1690.0 3380.0 10140.0 1690.0
4 10267 0.0 0.0 0.0 11490.0 0.0 0.0
5 10273 18157.0 32434.0 4900.0 0.0 10588.0 15094.0
df2:
Produtos Jan Feb Mar Apr May Jun Jul Aug
0 100 600.0 200.0 1100.0 300.0 500.0 1600.0 0.0 0.0
1 10057 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0
2 10058 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0
3 10236 700.0 500.0 100.0 200.0 600.0 100.0 200.0 100.0
4 10267 0.0 0.0 0.0 100.0 0.0 0.0 0.0 0.0
5 10273 400.0 700.0 100.0 0.0 200.0 300.0 300.0 300.0
我试图将一个数据帧除以另一个,以便创建一个新的数据帧。但是,如果不考虑第一列“ Produtos”,我不知道如何进行这种划分。
这样做:
v = df1.values / df2.values
我也将第一列分开。
答案 0 :(得分:1)
您将面临除以0的问题,得出NaN
的值,但是假设Produtos
列相等(因为它们在您的问题中),则可以将该列设置为索引,然后使用.div
:
df1.set_index('Produtos').div(df2.set_index('Produtos'))
Apr Aug Feb Jan Jul Jun Mar \
Produtos
100 27.646667 NaN 40.970000 26.473333 NaN 11.341250 37.336364
10057 249.000000 NaN NaN NaN NaN NaN NaN
10058 309.000000 NaN NaN NaN NaN NaN NaN
10236 16.900000 NaN 16.900000 16.625714 NaN 16.900000 16.900000
10267 114.900000 NaN NaN NaN NaN NaN NaN
10273 NaN NaN 46.334286 45.392500 NaN 50.313333 49.000000
May
Produtos
100 34.616
10057 NaN
10058 NaN
10236 16.900
10267 NaN
10273 52.940
如果它们并不总是相等,而您只想除以相应的索引号,请使用drop('Produtos',1)
:
>>> df1.drop('Produtos',1).div(df2.drop('Produtos',1))
Apr Aug Feb Jan Jul Jun Mar May
0 27.646667 NaN 40.970000 26.473333 NaN 11.341250 37.336364 34.616
1 249.000000 NaN NaN NaN NaN NaN NaN NaN
2 309.000000 NaN NaN NaN NaN NaN NaN NaN
3 16.900000 NaN 16.900000 16.625714 NaN 16.900000 16.900000 16.900
4 114.900000 NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN 46.334286 45.392500 NaN 50.313333 49.000000 52.940
答案 1 :(得分:1)
您可以使用iloc
忽略每个数据框中的第一列并划分结果。
>>> df1.iloc[:, 1:].div(df2.iloc[:, 1:])[df1.columns[1:]]
Jan Feb Mar Apr May Jun
0 26.473333 40.970000 37.336364 27.646667 34.616 11.341250
1 NaN NaN NaN 249.000000 NaN NaN
2 NaN NaN NaN 309.000000 NaN NaN
3 16.625714 16.900000 16.900000 16.900000 16.900 16.900000
4 NaN NaN NaN 114.900000 NaN NaN
5 45.392500 46.334286 49.000000 NaN 52.940 50.313333
答案 2 :(得分:1)
如果您知道数据框形状和<div class="box">
Two div elements with borders.
</div>
系列是对齐的,则可以这样使用NumPy:
Produtos