【问题标题】:Dataframe divide series on pandas熊猫上的数据框划分系列
【发布时间】:2019-05-16 22:00:57
【问题描述】:

我需要将矩阵df1 的每一列分成矩阵df2 的一列。得到一个维度为df1 (3*2) 的矩阵。

我需要一个结果:dataframe[[1/6, 2/7, 3/8], [3/6, 4/7, 5,8]]

df1 = pd.DataFrame(data = [[1,2,3],[3,4,5]], index = ['a','b'], columns = ['i','ii','iii'])
df2 = pd.DataFrame(data = [[6],[7],[8]], index = ['a','b','c'], columns = ['i'])

df1.div(df2, axis = 'columns')
=> does not work

for i in range(0,2)
    a = df1[df1.columns[i]] / df2
=> summarizes the result in one column

感谢您的帮助

【问题讨论】:

  • 按列划分?确定?
  • 我需要一个结果:dataframe[[1/6, 2/7, 3/8], [3/6, 4/7, 5,8]]
  • 好的,所以你想在df1中划分行
  • 别忘了你可以在这里为所有答案投票@KrDanRod :)

标签: python pandas numpy


【解决方案1】:

这是一种方法:

pd.DataFrame(df1.values/ df2.values.T, columns=df1.columns)

       i        ii      iii
0  0.166667  0.285714  0.375
1  0.500000  0.571429  0.625

【讨论】:

    【解决方案2】:

    对于 pandas 0.24+,您可以除以 Series 转换为数组的 Series.valuesSeries.to_numpy

    df = df1.div(df2['i'].values)
    #pandas 0.24+
    #df = df1.div(df2['i'].to_numpy())
    print (df)
              i        ii    iii
    a  0.166667  0.285714  0.375
    b  0.500000  0.571429  0.625
    

    【讨论】:

    • Pandas 文档很烂。你的帖子很有帮助。
    【解决方案3】:

    与系列:

    s = pd.Series(df2.values.flatten().tolist(), index=df1.columns)
    print(df1.div(s))
    
    

    输出:

              i        ii    iii
    a  0.166667  0.285714  0.375
    b  0.500000  0.571429  0.625
    

    【讨论】:

      猜你喜欢
      • 2018-11-10
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 2019-10-12
      • 2015-11-30
      相关资源
      最近更新 更多