python 如何在for循环中从同一行的不同列中选择一个值?

bvjveswy  于 2023-03-16  发布在  Python
关注(0)|答案(3)|浏览(190)

我尝试从不同年份的CSV中合计某个特定年份的另一列中的值。
| 年|价值|
| - ------|- ------|
| 二○ ○ ○年|五个|
| 二○ ○一年|四个|
| 二○ ○ ○年|三个|
| 二○ ○二年|六个|
等等
其中定义的值total为total_value = 0
我有:

for year in years:
   if year == 2000:
       total_value += ???

返回的值应该是8。我试过使用.loc修饰符,但没有用。这是一个简单的问题,但我现在就是想不通!

hgb9j2n6

hgb9j2n61#

import pandas as pd
df = pd.read_csv('path_here.csv')
df.groupby('years').value.sum()[2000]
tpgth1q7

tpgth1q72#

这里有一些非Pandas的答案,使用的是csv模块,注意,因为我没有把年份值转换成int,所以target_year是字符串格式的。
1.使用csv.DictReader读取每一行,检查年份并将值相加。

import csv

total_value = 0
target_year = "2000"

with open("data.csv", "r") as f:
    reader = csv.DictReader(f)
    for row in reader:
        if row["years"] == target_year:
            total_value += int(row["value"])

print(total_value)

1.使用带有列表解析的csv.readersum()获取匹配值。

import csv

target_year = "2000"

with open("data.csv", "r") as f:
    reader = csv.reader(f)
    next(reader)  # Skip the header row
    total_value = sum([int(row[1]) for row in reader if row[0] == target_year])

print(total_value)

如果要检查多个年份的组合,可以将它们全部放在一个列表中,然后使用类似if row["years"] in target_years:的命令

daupos2t

daupos2t3#

下面是使用loc方法的一种方法
我假设 Dataframe 有三列:years,value,total_value此代码对所选年份的值求和,并在所选年份的所有行的total_value列中更改该值

import pandas as pd
df = pd.read_csv("path.csv")

def total_value(year):
    for index, row in df.iterrows():
        if row["years"] == year:
            df.loc[df['years'] == year, ["total_value"]]+= row["value"]

我希望你觉得这个有用

相关问题