Python 迭代时串联和求和列值
我正在尝试创建一个函数,该函数将接收CSV文件,并创建数据帧和连接/求和,如下所示: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
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