python - 将函数应用于基于列的数据帧以及基于索引的其他数据帧
问题描述
我想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
解决方案
首先使用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
推荐阅读
- shell - 如何将输出重定向到文件,如果它不存在则不创建它?
- html - 在 Bootstrap 中编辑导航窗格
- java - 如何使用 AsyncTask 向目标发送多个请求
- reactjs - 在表单提交后使用 ant design 在 react 中设置表单文本字段值
- ruby-on-rails - Ruby on Rails - minitest assert_select 测试通过任何解析的 JSON,即使它应该失败
- javascript - 单击一个按钮并使用 JavaScript(或 jquery)获取同一行中的单元格值
- android - 即使 Wi-Fi 可用,也可以使用 LTE(蜂窝)下载 HTTP 文件
- javascript - Firebase 插件(FCM)未定义
- javascript - 它来自 freecodecamp,我需要帮助来弄清楚 push() 与 concat()
- html - 是否有执行 href 的 HTML 函数?