gpt4 book ai didi

python - 如何在列和行中同时进行循环以在数据帧的某些位置设置零?

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:08 25 4
gpt4 key购买 nike

我有一个包含 14000 行的数据框,信息关联在代表年份的 2010 到 2050 列中。我需要在年份(df.columns - 2010 到 2050)大于与 Year_out 列关联的值的情况下设置零(例如,第一行中的值为 2020)

years = np.arange(2013,2050)
rows = np.arange(0, 14000)

df
Plan 2010 2020 2030 2040 2050 year_out
0 Australia 500 500 500 500 500 2020
1 Australia 400 400 400 400 400 2020
2 New Zealand 300 300 300 300 300 2020
3 New Zealand 200 200 200 200 200 2020

我已经尝试过

for df.columns in years:
for df.index in rows:
df.loc[df.index, "year_out"]
if df.loc[df.index, "year_out"] > df.columns:
#print('yes')
df.loc[df.index, df.columns] = 0

我想得到

    Plan         2010  2020  2030  2040  2050  year_out
0 Australia 500 500 0 0 0 2020
1 Australia 400 400 400 0 0 2030
2 New Zealand 300 300 300 0 0 2040
3 New Zealand 200 200 200 200 0 2050

感谢您的帮助。

最佳答案

IIUC,您可以使用 Pandas apply 并根据其 year_out 值更新每一行:

def updater(row):
for col in row.index:
try:
if int(col) >= row['year_out']:
row[col] = 0
except ValueError:
pass
return row

df.apply(updater, axis=1)
Plan 2010 2020 2030 2040 2050 year_out
0 Australia 500 0 0 0 0 2020
1 Australia 400 400 0 0 0 2030
2 New Zealand 300 300 300 0 0 2040
3 New Zealand 200 200 200 200 0 2050

示例数据:

data =  {'Plan': {0: 'Australia', 1: 'Australia', 2: 'New Zealand', 3: 'New Zealand'},
'2010': {0: 500, 1: 400, 2: 300, 3: 200},
'2020': {0: 500, 1: 400, 2: 300, 3: 200},
'2030': {0: 500, 1: 400, 2: 300, 3: 200},
'2040': {0: 500, 1: 400, 2: 300, 3: 200},
'2050': {0: 500, 1: 400, 2: 300, 3: 200},
'year_out': {0: 2020, 1: 2030, 2: 2040, 3: 2050}}
df = pd.DataFrame(data)

df
Plan 2010 2020 2030 2040 2050 year_out
0 Australia 500 500 500 500 500 2020
1 Australia 400 400 400 400 400 2030
2 New Zealand 300 300 300 300 300 2040
3 New Zealand 200 200 200 200 200 2050

注意:当列为 >=>year_out 时,您的预期输出似乎会在将列设置为零之间交替。我假设这是一个错误,并且我在这个答案中设置了一致的规则(如果需要,可以轻松更改)。

关于python - 如何在列和行中同时进行循环以在数据帧的某些位置设置零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52617018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com