pandas 按条件迭代 Dataframe 和合计事务

ktca8awb  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(126)

我有以下数据样本:

id   year  type  num
     1   1994   A     0
     2   1950   A  2333
     3   1977   B  4444
     4   1995   B   555
     1   1994   A     0
     6   1955   A   333
     7   2006   B  4123
     6   1975   A     0
     9   1999   B   123
     3   1950   A  1234

我正在寻找根据type == 'A'和year〈1999条件对列'num'求和的最简单方法
我正在使用以下数据迭代 Dataframe df:

data = pd.read_csv('data.csv')
    df = pd.DataFrame(data)
    df_sum = pd.DataFrame
    
    for index, row in df.iterrows():
        if row['type'] == 'A' and row['year'] < 1999:
            df_sum = df_sum.append(row) //This doesn't work

并尝试将符合条件的行存储到df_sum中,在df_sum中,我将按id汇总num。不知道如何迭代并将基于条件的数据存储到新的 Dataframe 中。
预期产出为:

id num_sum
1   0
2   2333
6   333
.....
gijlo24d

gijlo24d1#

对于汇总的数据,您可以过滤、分组求和,然后重置索引

df_sum = df[((df.type=='A')&(df.year<1999))].groupby('id').sum('num').reset_index()
df_sum
Out[276]: 
   id  year   num
0   1  3988     0
1   2  1950  2333
2   3  1950  1234
3   6  3930   333
lb3vh1jj

lb3vh1jj2#

您可以使用df.query()来完成此操作。

filtered_df = df.query('type == "A" and year < 1999')
sum_df = filtered_df.groupby("id")["num"].sum().reset_index()
print(sum_df)

输出:

id      num
0   1        0
1   2     2333
2   3     1234
3   6      333

相关问题