如何在 Pandas 数据框中对两列进行逐元素除法操作。

46

我有一个Pandas数据框,其中包含两列。我想逐个值将列A除以列B,并按以下方式显示:

import pandas as pd

csv1 = pd.read_csv('auto$0$0.csv')
csv2 = pd.read_csv('auto$0$8.csv')

df1 = pd.DataFrame(csv1, columns=['Column A', 'Column B'])
df2 = pd.DataFrame(csv2, columns=['Column A', 'Column B'])

dfnew = pd.concat([df1, df2])

列:

Column A  Column B
12        2
14        7
16        8
20        5

预期结果为:

Result
6
2
2
4

我该怎么做?

3个回答

90

只需将列进行分割:

In [158]:
df['Result'] = df['Column A']/df['Column B']
df

Out[158]:
   Column A  Column B  Result
0        12         2     6.0
1        14         7     2.0
2        16         8     2.0
3        20         5     4.0

6

Series.div()

相当于使用/运算符,但支持在任一输入中替换fill_value以替代缺失数据。因此,通常情况下div()/相同:
df['C'] = df.A.div(df.B)
#         df.A / df.B

但是div()fill_value比2倍的fillna()更加简洁:

df['C'] = df.A.div(df.B, fill_value=-1)
#         df.A.fillna(-1) / df.B.fillna(-1)

而且div()的方法链更符合惯用法:

df['C'] = df.A.div(df.B).cumsum().add(1).gt(10)
#         ((df.A / df.B).cumsum() + 1) > 10

请注意,当将一个DataFrame除以另一个DataFrame或Series时,DataFrame.div()也支持在axis或MultiIndex level上进行广播。

3

div/ 如果索引不匹配,则无法正常工作。 当列来自不同的数据帧或同一数据帧中的某些行被其他行分隔时,这很常见。 在这种情况下,请将被除数列转换为numpy数组。

df1 = pd.DataFrame({'A': range(5)})
df2 = pd.DataFrame({'B': range(10,15)}, index=range(10,15))

df1['C'] = df1['A'] / df2['B']             # <---- Bunch of NaNs
df1['C'] = df1['A'] / df2['B'].values      # <---- OK
df1['C'] = df1['A'].div(df2['B'].values)   # <---- OK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接