首页 > 解决方案 > 查找具有匹配值的所有行,将所有匹配值输出到同一行

问题描述

我从不使用 python,所以不知道如何解决这个问题。我有一个具有以下格式的 excel/csv 文件。我需要找到所有具有匹配 IN_FID 值的行,并将这些行输出到新文件的同一行中。

我的文件.csv:

ROUTE_NAME  CURR_VOL    IN_FID      NEAR_RANK
test11      test11      1           test11
test12      test12      1           test12
test2       test2       2           test2
test3       test3       3           test3
test31      test        3           test31

期望的输出:

IN_FID   ROUTE_NAME1    NEAR_RANK1     ROUTE_NAME2     NEAR_RANK2
1        test11         test11         test12          test12
2        test2          test2          null            null
3        test3          test3          test31          test31

我一开始只是尝试用 python 操作 csv,但我想知道是否有像 pandas 这样的库会更好用?

#!/usr/bin/python
import csv
profile_to_search = input()

with open('myfile.csv', 'rt') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        if profile_to_search == row[2]:
            print(row)

我走了这么远,然后意识到我不知道自己在做什么。

标签: pythonpandascsv

解决方案


只是一个cumcount那么应该是简单的pivot问题

df['Key']=df.groupby('IN_FID').cumcount()+1
s=df.pivot_table(index='IN_FID',columns='Key',values=['ROUTE_NAME','NEAR_RANK'],aggfunc='first')
s=s.sort_index(level=1,axis=1)
s.columns=s.columns.map('{0[0]}_{0[1]}'.format)
s
       NEAR_RANK_1 ROUTE_NAME_1 NEAR_RANK_2 ROUTE_NAME_2
IN_FID                                                  
1           test11       test11      test12       test12
2            test2        test2        None         None
3            test3        test3      test31       test31

推荐阅读