gpt4 book ai didi

Python:如何从数据帧中行查找数据并根据列匹配在另一个数据帧中相乘

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:46 25 4
gpt4 key购买 nike

我有一个数据帧 df1,其结构如下

A   B   C   D
10 9 9 4
5 4 4 9
5 10 6 4
9 9 9 4
4 7 10 7
9 7 4 8
5 7 8 9
10 4 10 6

我有另一个数据框 df2 如下,

name    factor
A 2
B 3
C 4
D 8

如何从 df2 查找 A、B、C、D 的值并与 df1 [A、B、C、D] 相乘并得到 df3,例如,

A   B   C   D
20 27 36 32
10 12 16 72
10 30 24 32
18 27 36 32
8 21 40 56
18 21 16 64
10 21 32 72
20 12 40 48

最佳答案

使用mul对于 set_index 创建的 Series 的多个:

df3 = df1.mul(df2.set_index('name')['factor'])
print (df3)
A B C D
0 20 27 36 32
1 10 12 16 72
2 10 30 24 32
3 18 27 36 32
4 8 21 40 56
5 18 21 16 64
6 10 21 32 72
7 20 12 40 48

详细信息:

print (df2.set_index('name')['factor'])
name
A 2
B 3
C 4
D 8
Name: factor, dtype: int64

编辑:

如果缺少某些类别,可以使用fillna,谢谢Wen :

s = df2.set_index('name').drop('D')['factor']
print (s)
name
A 2
B 3
C 4
Name: factor, dtype: int64

df3 = df1.mul(s).fillna(df1)
print (df3)
A B C D
0 20.0 27.0 36.0 4.0
1 10.0 12.0 16.0 9.0
2 10.0 30.0 24.0 4.0
3 18.0 27.0 36.0 4.0
4 8.0 21.0 40.0 7.0
5 18.0 21.0 16.0 8.0
6 10.0 21.0 32.0 9.0
7 20.0 12.0 40.0 6.0

编辑1:

如果想按Series比较DataFrame:

s = df2.set_index('name')['factor']
print (s)
name
A 2
B 3
C 4
D 8
Name: factor, dtype: int64

df1['A'] = (np.log(df1['A']) * s['A']) ** 3
print (df1)
A B C D
0 97.664572 9 9 4
1 33.351293 4 4 9
2 33.351293 10 6 4
3 84.862013 9 9 4
4 21.313578 7 10 7
5 84.862013 7 4 8
6 33.351293 7 8 9
7 97.664572 4 10 6

对于所有列:

df1 = (np.log(df1) * s) ** 3
print (df1)
A B C D
0 97.664572 286.409295 678.896108 1364.068975
1 33.351293 71.933325 170.508622 5431.168861
2 33.351293 329.617932 368.145163 1364.068975
3 84.862013 286.409295 678.896108 1364.068975
4 21.313578 198.944581 781.316579 3772.578718
5 84.862013 198.944581 170.508622 4603.732789
6 33.351293 198.944581 575.466599 5431.168861
7 97.664572 71.933325 781.316579 2945.161306

关于Python:如何从数据帧中行查找数据并根据列匹配在另一个数据帧中相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47717266/

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