Python - 根据条件读取文本文件中的特定行

标签 python file line readfile

问题陈述:

我有一个如下文件。

name | date | count
John | 201406 | 1
John | 201410 | 2
Mary | 201409 | 180
Mary | 201410 | 154
Mary | 201411 | 157
Mary | 201412 | 153
Mary | 201501 | 223
Mary | 201502 | 166
Mary | 201503 | 163
Mary | 201504 | 169
Mary | 201505 | 157
Tara | 201505 | 2

该文件显示了约翰、玛丽和塔拉三人几个月的计数数据。我想分析这些数据并为每个人提供一个状态标签,即活跃、不活跃或新的。

如果一个人有 201505 和之前其他月份的条目,则该人处于活跃状态 - 例如 Mary

如果一个人没有 201505 的条目,则该人处于不活动状态 - 例如 John

如果一个人只有 1 个 201505 条目,那么他就是新人 - 就像 Tara。

此外,如果一个人很活跃,我想获得他们最后 5 次计数的中位数。例如,对于玛丽,我想得到的平均值为 ((157 + 169 + 163 + 166 + 223 )/5)。

问题:

我想了解如何在 Python 2.7 中读取此文件以满足我的要求。我从以下内容开始,但不确定如何获取特定人员的先前条目(即文件中的先前行)。

for line in data:
    col = line.split('\t')
    name = col[0]
    date = col[1]
    count = col[2]

最佳答案

import pandas as pd:
df = pd.read_csv('input_csv.csv') # This assumes you have a csv format file
names = {}
for name, subdf in df.groupby('name'):
    if name not in names:
        names[name] = {}
    if (subdf['date']==201505).any():
        if subdf['count'].count()==1:
            names[name]['status'] = 'new'
        else:
            names[name]['status'] = 'active'
            names[name]['last5median'] = subdf['count'].tail().median()
    else:
        names[name]['status'] = 'inactive'


>>>
{'John': {'status': 'inactive'},
 'Mary': {'last5median': 166.0, 'status': 'active'},
 'Tara': {'status': 'new'}}

关于Python - 根据条件读取文本文件中的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30630003/

相关文章:

arrays - 从文件中读取字符串并转换为数组 Julia

vba - 如何在 Excel VBA 中创建自动动态折线图

php - 获取调用该函数的行?

python - 使用 PIL 和 numpy 进行慢速 python 图像处理

Python脚本无法在没有密码的情况下连接到MySQL数据库

java - 计算目录中的图像

c++ - c中第二次读取文件时程序崩溃

java - 计算并打印java中用户输入的空行总数

Python kivy 最低系统要求

python - 如何将多个 Pandas 系列合并到一个数据框,其中系列具有值列表