【问题标题】:How to divide two columns element-wise in a pandas dataframe如何在熊猫数据框中按元素划分两列
【发布时间】:2016-08-05 19:15:26
【问题描述】:

我的 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

我该怎么做?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    Series.div()

    等效于/ 运算符,但支持用fill_value 替换任一输入中的缺失数据。

    所以通常div()/ 相同:

    df['C'] = df.A.div(df.B)
    #         df.A / df.B
    

    但是div()fill_value比2x 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 进行广播。

    【讨论】:

      【解决方案2】:

      只分列:

      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
      

      【讨论】:

      • 还有其他人收到 SettingWithCopyWarning 吗?
      • @ThirstforKnowledge 警告是由于从另一个数据帧继承而来的。你应该试试original_df = pd.DataFrame({'a':[1,2,3,4], 'b':[5,6,7,8]}); df = original_df.copy(); df['c'] = df['a']/df['b']
      猜你喜欢
      • 2018-11-10
      • 2021-08-25
      • 2016-01-14
      • 2022-06-27
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      相关资源
      最近更新 更多