簡體   English   中英

將 pandas dataframe 的每一行乘以另一行 dataframe

[英]Multiplying each row of a pandas dataframe by another row dataframe

所以我想將 dataframe 的每一行與乘數向量相乘,我正在管理,但它看起來很難看。 這可以改進嗎?

import pandas as pd
import numpy as np


# original data
df_a = pd.DataFrame([[1,2,3],[4,5,6]])
print(df_a, '\n')

# multiplier vector
df_b = pd.DataFrame([2,2,1])
print(df_b, '\n')

# multiply by a list - it works
df_c = df_a*[2,2,1]
print(df_c, '\n')

# multiply by the dataframe - it works
df_c = df_a*df_b.T.to_numpy()
print(df_c, '\n')

“它看起來很丑”是主觀的,也就是說,如果你想將 dataframe 的所有行與你需要的其他東西相乘:

  • 兼容形狀的 dataframe (和兼容索引,因為它們在 pandas 中的操作之前對齊,這就是為什么df_a*df_b.T僅適用於公共索引: 0

  • 一維向量,在 pandas 中是一個系列

使用系列:

df_a*df_b[0]

output:

   0   1  2
0  2   4  3
1  8  10  6

當然,如果您真的不需要 2D 容器,最好直接定義 Series:

s = pd.Series([2,2,1])
df_a*s

只是為了美觀,您可以使用Einstein summation

>>> np.einsum('ij,ji->ij', df_a, df_b)

array([[ 2,  4,  3],
       [ 8, 10,  6]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM