如何在不同的csv文件中对第二列中的相同id和值求和,并使用pandas将结果保存到新的csv中?

2024-09-28 03:16:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个包含ID和activeUsers列的csv文件。这些文件中的ID有时只存在于一个文件中,两个文件中,但有时它们可以存在于每个文件中。我的ID在每个文件中都是唯一的

每个csv文件格式:

      id                activeUsers
470c-9930-4495c5             4
     ...                    ...

我需要在pandas中建立逻辑,以帮助我获得以下信息:

  • 三个文件中的任意一个,如果每个文件中都有ID,并且 所有文件=0,然后标记为真
  • 如果ID出现在少于3个文件中或如果 所有文件中的activeUsers大于0,然后标记为FALSE

新数据帧中的所需结果:

     id           IDoccurenceInFiles       SumOfActiveUsers    True/False
470c-9930-4495c5           2                        4             FALSE
123a-8870-1234a3           3                        0             TRUE

到目前为止,我的代码是:

import pandas as pd

#3 monthly files
df1 = pd.read_csv('09-2020.csv', sep = ',')
df2 = pd.read_csv('10-2020.csv', sep = ',')
df3 = pd.read_csv('11-2020.csv', sep = ',')

#rename columns in each file
df1.columns = ['id','activeUsers']
df2.columns = ['id','activeUsers']
df3.columns = ['id','activeUsers']

#create dataframe to capture results
df4=pd.DataFrame()

#calculate 'IDoccurenceInFiles' to see if a particular ID would be present 1, 2 or 3 times
df4['IDoccurenceInFiles']=df3.groupby('id')['id'].map(df2['id'].value_counts(),df1['id'].value_counts())

#calculate 'SumOfActiveUsers' across 3 files
df4['SumOfActiveUsers']=

#calculate 'True/False' based on the logic listed above
df4['True/False']=

df4.to_csv('results.csv', index = False)

对于我的第一次计算(IDoccurrenceInfiles),我收到以下错误:

AttributeError: 'SeriesGroupBy' object has no attribute 'map'

此外,我不确定这是否是正确的方法。也许我是想把这件事搞得太复杂了。有人能帮忙吗。先谢谢你


Tags: columns文件csvidfalsetruereadsep
1条回答
网友
1楼 · 发布于 2024-09-28 03:16:35

如果在某些文件中没有重复activeUsers,则可以使用^{}与“按计数和总和聚合”以及“按条件最后设置新列”:

df4 = (pd.concat([df1, df2, df3])
         .groupby('id', sort=False)
         .agg(IDoccurenceInFiles = ('activeUsers','size'),
              SumOfActiveUsers = ('activeUsers','sum'))
       )
df4['True/False'] = df4['SumOfActiveUsers'].eq(0) & df4['IDoccurenceInFiles'].eq(3)

df4.to_csv('results.csv')

相关问题 更多 >

    热门问题