为了账号安全,请及时绑定邮箱和手机立即绑定

将函数应用于基于列的数据帧和基于索引的其他数据帧

将函数应用于基于列的数据帧和基于索引的其他数据帧

拉丁的传说 2021-10-12 16:15:44
我想x*apples^y根据它们的颜色对列苹果的值执行一些操作(例如)。相应的值位于单独的数据框中:import pandas as pdimport numpy as npdf1 = pd.DataFrame({'apples': [2, 1, 5, 6, 7], 'color': [1, 1, 1, 2, 2]})df2 = pd.DataFrame({'x': [100, 200], 'y': [0.5, 0.3]}).set_index(np.array([1, 2]), 'color')我正在寻找以下结果:   apples        color0  100*2^0.5      11  100*1^0.5      12  100*5^0.5      13  200*6^0.3      24  200*7^0.3      2
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

首先使用DataFrame.join默认的左连接,然后使用附加列进行操作:


df = df1.join(df2, on='color')

df['apples'] = df['x'] * df['apples'] ** df['y']

print (df)

       apples  color    x    y

0  141.421356      1  100  0.5

1  100.000000      1  100  0.5

2  223.606798      1  100  0.5

3  342.353972      2  200  0.3

4  358.557993      2  200  0.3

有左连接,所以追加到新列df1应该工作:


df = df1.join(df2, on='color')

df1['apples'] = df['x'] * df['apples'] ** df['y']

print (df1)

       apples  color

0  141.421356      1

1  100.000000      1

2  223.606798      1

3  342.353972      2

4  358.557993      2

另一个想法是使用 double map:


df1['apples'] = df1['color'].map(df2['x']) * df1['apples'] ** df1['color'].map(df2['y'])

print (df1)

       apples  color

0  141.421356      1

1  100.000000      1

2  223.606798      1

3  342.353972      2

4  358.557993      2


查看完整回答
反对 回复 2021-10-12
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

我认为你需要pandas.merge -


temp = df1.merge(df2, left_on='color', right_index= True, how='left')

df1['apples'] = (temp['x']*(temp['apples'].pow(temp['y'])))

输出


       apples  color

0  141.421356      1

1  100.000000      1

2  223.606798      1

3  342.353972      2

4  358.557993      2


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信