Pandas中Dataframe对Series的划分

3

我需要将矩阵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

感谢您的帮助。

按列分割?确定吗? - yatu
我需要一个结果:dataframe[[1/6, 2/7, 3/8], [3/6, 4/7, 5,8]]。 - KrDan Rod
好的,所以您想要在df1中分割行。 - yatu
不要忘记在这里给 @KrDanRod 的所有答案点赞 :) - yatu
3个回答

1

您可以通过将Series转换为数组,然后使用 Series.valuesSeries.to_numpy 进行除法运算,适用于 pandas 0.24+ 版本:

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

1
Pandas 的文档太烂了。你的帖子很有帮助。 - prosti

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

0

使用系列:

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

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