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

我想x*apples^y根据它们的颜色对列苹果的值执行一些操作(例如)。相应的值位于单独的数据框中:


import pandas as pd

import numpy as np

df1 = 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        color

0  100*2^0.5      1

1  100*1^0.5      1

2  100*5^0.5      1

3  200*6^0.3      2

4  200*7^0.3      2


拉丁的传说
浏览 151回答 2
2回答

饮歌长啸

首先使用DataFrame.join默认的左连接,然后使用附加列进行操作:df = df1.join(df2, on='color')df['apples'] = df['x'] * df['apples'] ** df['y']print (df)       apples  color    x    y0  141.421356      1  100  0.51  100.000000      1  100  0.52  223.606798      1  100  0.53  342.353972      2  200  0.34  358.557993      2  200  0.3有左连接,所以追加到新列df1应该工作:df = df1.join(df2, on='color')df1['apples'] = df['x'] * df['apples'] ** df['y']print (df1)       apples  color0  141.421356      11  100.000000      12  223.606798      13  342.353972      24  358.557993      2另一个想法是使用 double map:df1['apples'] = df1['color'].map(df2['x']) * df1['apples'] ** df1['color'].map(df2['y'])print (df1)       apples  color0  141.421356      11  100.000000      12  223.606798      13  342.353972      24  358.557993      2

繁花不似锦

我认为你需要pandas.merge -temp = df1.merge(df2, left_on='color', right_index= True, how='left')df1['apples'] = (temp['x']*(temp['apples'].pow(temp['y'])))输出       apples  color0  141.421356      11  100.000000      12  223.606798      13  342.353972      24  358.557993      2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python