我正在尝试基于现有列在 Pandas 数据框中创建一个新列。
第一列 | 列2 | 第3列 | y1 | y2 | y3 |
---|---|---|---|---|---|
100 | 200 | 300 | 2020年 | 2021年 | 2022年 |
100 | 200 | 300 | 2021年 | 2022年 | 2023 |
100 | 200 | 300 | 2019年 | 2020年 | 2021年 |
我想要一个新列vals如果 currentyear = y1 和 col2 如果 currentyear = y2 则取col1 的值
第一列 | 列2 | 第3列 | y1 | y2 | y3 | 错误的 |
---|---|---|---|---|---|---|
100 | 200 | 300 | 2020年 | 2021年 | 2022年 | 200 |
100 | 200 | 300 | 2021年 | 2022年 | 2023 | 100 |
100 | 200 | 300 | 2019年 | 2020年 | 2021年 | 300 |
我正在尝试以下代码:
def assignvalues(df):
if df['y1'] == currentyear:
df['Vals'] = df['col1']
elif df['y2'] == currentyear:
df['Vals'] = df['col2']
elif df['y3'] == currentyear:
df['Vals'] = df['col3']
df.apply(assignvalues)
它确实创建列但不存储任何值。
从您的DataFrame
:
>>> import pandas as pd
>>> from io import StringIO
>>> df = pd.read_csv(StringIO("""
... column1,column2,column3,y1,y2,y3
... 100,200,300,2020,2021,2022
... 100,200,300,2021,2022,2023
... 100,200,300,2019,2020,2021"""))
>>> df
column1 column2 column3 y1 y2 y3
0 100 200 300 2020 2021 2022
1 100 200 300 2021 2022 2023
2 100 200 300 2019 2020 2021
以及函数assignvalues
,它现在从每个 的预期列返回值if
。我们设置currentyear
at2021
例如:
>>> def assignvalues(df):
... if df['y1'] == currentyear:
... return df['column1']
... elif df['y2'] == currentyear:
... return df['column2']
... elif df['y3'] == currentyear:
... return df['column3']
>>> currentyear = 2021
我们可以像您一样分配给df["Vals"]
一个参数以获得预期的结果:apply()
axis=1
>>> df["Vals"] = df.apply(assignvalues, axis=1)
>>> df
column1 column2 column3 y1 y2 y3 Vals
0 100 200 300 2020 2021 2022 200
1 100 200 300 2021 2022 2023 100
2 100 200 300 2019 2020 2021 300
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句