首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为dataframe (整数)列编写for -循环/if-语句

如何为dataframe (整数)列编写for -循环/if-语句
EN

Stack Overflow用户
提问于 2022-03-16 09:36:48
回答 3查看 109关注 0票数 0

我有一个带有代表生日的整数列的数据格式。每一行都有20 xx或19 xx,但有些行只包含xx部分。

我要做的是在这些数字前面加上19,如果整数大于22 (从0开始),则只有2个“elemet”,或者/并在小于或等于22的数字前面加20。

这就是我写的;

代码语言:javascript
运行
复制
for x in DF.loc[DF["Year"] >= 2022]:
  x + 1900
  if:
    x >= 22 
  else:
    x + 2000

你也可以完全改变代码,我只想让你解释一下你的代码到底是做什么的。

谢谢大家花时间来回答这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-16 10:52:05

与其迭代行,不如使用where来更改整个列:

代码语言:javascript
运行
复制
y = df["Year"] # just to save typing
df["Year"] = y.where(y > 99, (y + 1900).where(y > 22, y + 2000))

标引

代码语言:javascript
运行
复制
df["Year"][df["Year"].between(0, 21)] += 2000
df["Year"][df["Year"].between(22, 99)] += 1900

loc

代码语言:javascript
运行
复制
df.loc[df["Year"].between(0, 21), "Year"] += 2000
df.loc[df["Year"].between(22, 99), "Year"] += 1900
票数 1
EN

Stack Overflow用户

发布于 2022-03-16 10:03:39

这基本上就是你所做的,一个if在一个for里面

代码语言:javascript
运行
复制
new_list_of_years = []
for year in DF.loc[DF["Year"]:
    full_year = year+1900 if year >22 else year+2000
    new_list_of_years.append(full_year)

DF['Year'] = pd.DataFrame(new_list_of_years)

编辑:--您可以使用for-if列表理解完成这一任务:

代码语言:javascript
运行
复制
DF['Year'] = [year+1900 if year > 22 else year+2000 for year in DF.loc[DF["Year"]]]
票数 0
EN

Stack Overflow用户

发布于 2022-03-16 10:10:23

您可以使用apply方法在一行中完成此操作。

示例:

代码语言:javascript
运行
复制
df = pd.DataFrame({'date': [2002, 95, 1998, 3, 56, 1947]})
print(df)

   date
0  2002
1    95
2  1998
3     3
4    56
5  1947

然后:

代码语言:javascript
运行
复制
df = df.date.apply(lambda x: x+1900 if (x<100) & (x>22) else (x+2000 if (x<100)&(x<22) else x) )
代码语言:javascript
运行
复制
print(df)

   date
0  2002
1  1995
2  1998
3  2003
4  1956
5  1947
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71494657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档