Python 迭代时串联和求和列值

Python 迭代时串联和求和列值,python,pandas,loops,Python,Pandas,Loops,我正在尝试创建一个函数,该函数将接收CSV文件,并创建数据帧和连接/求和,如下所示: id number_of_visits 0 3902932804358904910 2 1 5972629290368575970 1 2 5345473950081783242 1 3 4289865755939302179 1 4 36619425050724793929 19 + id number_of_visits 0 390293

我正在尝试创建一个函数,该函数将接收CSV文件,并创建数据帧和连接/求和,如下所示:

    id     number_of_visits
0   3902932804358904910  2
1   5972629290368575970  1
2   5345473950081783242  1
3   4289865755939302179  1
4   36619425050724793929 19

+ 

    id     number_of_visits
0   3902932804358904910  5
1   5972629290368575970  10
2   5345473950081783242  3
3   4289865755939302179  20
4   36619425050724793929 13

=

    id     number_of_visits
0   3902932804358904910  7
1   5972629290368575970  11
2   5345473950081783242  4
3   4289865755939302179  21
4   36619425050724793929 32

我的主要问题是,在创建数据帧后的for循环中,我试图通过
df+=new_-df
进行连接,但是没有添加
new_-df
。因此,我尝试了以下实现

def add_dfs(files):
    master = []
    big = pd.DataFrame({'id': 0, 'number_of_visits': 0}, index=[0]) # dummy df to initialize
    for k in range(len(files)):
        new_df = create_df(str(files[k])) # helper method to read, create and clean dfs
        master.append(new_df) #creates a list of dataframes with in master
    for k in range(len(master)):
        big = pd.concat([big, master[k]]).groupby(['id', 'number_of_visits']).sum().reset_index()
        # iterate through list of dfs and add them together
    return big
这给了我以下信息

    id   number_of_visits
1   1000036822946495682 2
2   1000036822946495682 4
3   1000044447054156512 1
4   1000044447054156512 9
5   1000131582129684623 1
因此,每个
用户id
访问次数
实际上并不是相加,它们只是按照您可以使用的
访问次数
进行排序

df1['u的访问次数]+=df2['u的访问次数']
这将为您提供:

|    |                   id |   number_of_visits |
|---:|---------------------:|-------------------:|
|  0 |  3902932804358904910 |                  7 |
|  1 |  5972629290368575970 |                 11 |
|  2 |  5345473950081783242 |                  4 |
|  3 |  4289865755939302179 |                 21 |
|  4 | 36619425050724793929 |                 32 |

将数据帧列表直接传递给
concat()
,然后在
id上分组并求和

>>> pd.concat(master).groupby('id').number_of_visits.sum().reset_index()
                     id  number_of_visits
0  36619425050724793929                32
1   3902932804358904910                 7
2   4289865755939302179                21
3   5345473950081783242                 4
4   5972629290368575970                11

“所以每个用户id的访问次数实际上并没有加在一起,它们只是按照访问次数的顺序排序”好吧,那么你希望发生什么,这有什么不同?@KarlKnechtel我在帖子的开头展示了我想要的,但概括一下:我希望任何有多个条目的id只显示一次,并添加相应的访问次数。例如:如果数据帧A的id为100,有5次访问,数据帧B的id为100,有10次访问,那么当我将A和B加在一起时,我希望看到id为100,有15次访问。我的函数会得到两个id为100的条目依次显示是否有帮助?这没有帮助,因为我不只是想删除重复项;我需要为任何重复项添加访问次数中的值,同时删除重复项。如果您可以检测重复项并对其进行分组(这是删除它们的任务的一部分),则您可以进一步处理这些分组,例如通过对组内的值求和。感谢您的帮助!
def add_dfs(files):
    master = []
    for f in files:
        new_df = create_df(f) 
        master.append(new_df) 
    big = pd.concat(master).groupby('id').number_of_visits.sum().reset_index()
        
    return big