gpt4 book ai didi

python - 在 Pandas 中应用列

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:01 25 4
gpt4 key购买 nike

我正在尝试将两个 pandas data_frames 与不同数量的列相乘,我想最终得到第一个 data_frame 形状的结果 data_frame。即如果行和列匹配两个单元格的多个,否则保持第一个数据框中的值。下面的例子:不需要 for 循环的最有效的矩阵形式方法是什么?

谢谢!

df1:

enter image description here

df2:

enter image description here

结果 df (df_result = df1 * df2):

enter image description here

最佳答案

选项 1
使用 pd.DataFrame.align

pd.DataFrame.mul(*df1.align(df2, 'left', fill_value=1))

X Y Z
1/1/2017 0.26 0.94 0.22
1/3/2017 NaN 0.63 0.78
1/5/2017 0.73 0.79 0.25
1/6/2017 0.13 NaN 0.31

选项 2
使用 pd.DataFrame.reindex

df1 * df2.reindex(df1.index, df1.columns, fill_value=1)

X Y Z
1/1/2017 0.26 0.94 0.22
1/3/2017 NaN 0.63 0.78
1/5/2017 0.73 0.79 0.25
1/6/2017 0.13 NaN 0.31

选项 3
使用 pd.DataFrame.mask
正如评论者@CedricZoppolo 所推荐的:
警告:这是假设 1 的值旨在标记有效位置,如掩码。这不会乘以值。如果目的是真正使值相乘,则不要使用此选项。

df1.mask(df2.isnull().reindex_like(df1).fillna(False))

X Y Z
1/1/2017 0.26 0.94 0.22
1/3/2017 NaN 0.63 0.78
1/5/2017 0.73 0.79 0.25
1/6/2017 0.13 NaN 0.31


设置

from numpy import nan as NA

df1 = pd.DataFrame(dict(
X=[0.26, 0.45, 0.73, 0.13],
Y=[0.94, 0.63, 0.79, 0.16],
Z=[0.22, 0.78, 0.25, 0.31]
), ['1/1/2017', '1/3/2017', '1/5/2017', '1/6/2017'])

df2 = pd.DataFrame(dict(
X=[1, NA, NA, NA, 1, 1],
XX=[NA, NA, NA, 1, 1, 1],
Y=[1, 1, 1, 1, 1, NA],
Y1=[NA, NA, NA, 1, NA, NA],
YY=[NA, 1, NA, 1, NA, 1]
), ['1/1/2017', '1/2/2017', '1/3/2017', '1/4/2017', '1/5/2017', '1/6/2017'], dtype=object)

关于python - 在 Pandas 中应用列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46981535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com