鱼C论坛

 找回密码
 立即注册
查看: 784|回复: 3

[已解决]apply(fun(x,y))用法

[复制链接]
发表于 2021-9-12 18:56:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. def t_or_w(x,b_or_t):
  2.     for a,b in zip(x,b_or_t):
  3.             #print(a)
  4.             #print(b)
  5.             if '千' in str(a):
  6.                 #print(1)
  7.                 b=int(b)*1000
  8.                 #print(b)
  9.                 return b
  10.             elif '万' in str(a):
  11.                 b=int(b)*10000
  12.                 #print(b)
  13.                 return b

  14. df.apply(t_or_w(df['salary'],df['bottom']),axis=1)
复制代码


怎么把df.apply(t_or_w(df['salary'],df['bottom']),axis=1)的结果更新到列表里,即想要实现df.bottom=df.apply(t_or_w(df['salary'],df['bottom']),axis=1)
最佳答案
2021-9-13 13:04:21


不知道是不是你想要的代碼:
  1. import pandas as pd
  2. import numpy as np

  3. salary = [13, 5, 8, 11, 9]
  4. values = ["千", "萬", "千", "千", "萬"]

  5. df = pd.DataFrame([list(i) for i in zip(*[salary, values])], columns = ['A', 'B'])
  6. print(df, end = "\n\n")

  7. def funct(arr: list):
  8.     a, b = arr
  9.     if b == "千":
  10.         return a*1000
  11.     else:
  12.         return a*10000

  13. data = df.apply(funct, axis=1)
  14. print(data)
复制代码
  1.     A  B
  2. 0  13  千
  3. 1   5  萬
  4. 2   8  千
  5. 3  11  千
  6. 4   9  萬

  7. 0    13000
  8. 1    50000
  9. 2     8000
  10. 3    11000
  11. 4    90000
  12. dtype: int64
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-13 10:46:42 | 显示全部楼层
先去看看apply的基本用法,基本例子,不要自己瞎写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-13 12:28:08 | 显示全部楼层
试试:

  1. def t_or_w(x, a_name, b_name):
  2.     a = x[a_name]
  3.     b = x[b_name]
  4.     if '千' in str(a):
  5.         x[b_name] = int(b)*1000
  6.     elif '万' in str(a):
  7.         x[b_name] = int(b)*10000
  8.     return x
复制代码

  1. df.apply(t_or_w, axis=1, args=('salary','bottom'))
复制代码


会直接改变原来的 df
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-13 13:04:21 | 显示全部楼层    本楼为最佳答案   


不知道是不是你想要的代碼:
  1. import pandas as pd
  2. import numpy as np

  3. salary = [13, 5, 8, 11, 9]
  4. values = ["千", "萬", "千", "千", "萬"]

  5. df = pd.DataFrame([list(i) for i in zip(*[salary, values])], columns = ['A', 'B'])
  6. print(df, end = "\n\n")

  7. def funct(arr: list):
  8.     a, b = arr
  9.     if b == "千":
  10.         return a*1000
  11.     else:
  12.         return a*10000

  13. data = df.apply(funct, axis=1)
  14. print(data)
复制代码
  1.     A  B
  2. 0  13  千
  3. 1   5  萬
  4. 2   8  千
  5. 3  11  千
  6. 4   9  萬

  7. 0    13000
  8. 1    50000
  9. 2     8000
  10. 3    11000
  11. 4    90000
  12. dtype: int64
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-10 09:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表