如何在python中获取填充的csv值的最大长度?

zkure5ic  于 2023-07-31  发布在  Python
关注(0)|答案(3)|浏览(90)

我有一个csv,其中有两列“id”和“results”。一个“id”可以以相同或不同的值重复出现在csv上。我想按每一列对csv进行分组,并计算具有“results”的最大长度的id。

输入CSV

id, result
Test10001, 400
Test10001, 404
Test10001, 200
Test10002, 404
Test10002, 404 
Test10003, 400

字符串
我想到了使用dataframes,到目前为止已经做到了下面。

grouped_data = data.groupby('id')['result'].apply(list)

output -分组csv

id
Test10001 [400, 404, 200]
Test10002 [404, 404] 
Test10003 [400]


现在我想得到哪个“id”具有列表的最大长度。我很难得到每一个的长度,因为grouped_data的类型是<class 'pandas.core.series. Series'>。
请在这件事上帮助我。提前感谢!

4zcjmb1e

4zcjmb1e1#

你可以通过--来得到groupby操作中列表的长度

grouped = data.groupby('id').agg(length=('result', 'size'))

字符串
然后你可以使用argmax-

grouped.iloc[grouped['length'].argmax()]


或者按最大长度进行过滤-

grouped[grouped['length']==grouped['length'].max()]

nwnhqdif

nwnhqdif2#

使用groupby的方式如下

groups=data.groupby('id')['result'].apply(list).reset_index()
groups['Length']=groups['result'].apply(lambda x:len(x))
max_len=groups['Length'].max()
required_df=groups[groups['Length']==max_len]

字符串
您可以使用reset_index()函数来获得适当的结果

owfi6suc

owfi6suc3#

如果你想在没有数据框架的帮助下做到这一点,它就像...

FILENAME = '/Volumes/G-Drive/input.csv'

d = {}

_max = 0, None

with open(FILENAME) as csv:
    next(csv) # skip header
    for row in csv:
        k, n = row.split(',')
        d.setdefault(k, []).append(n)
        if (_l := len(d[k])) > _max[0]:
            _max = _l, k

print(_max[1])

字符串

输出:

Test10001


这里假设只有一个id与最大长度匹配。如果有一个以上,那么输出可能不符合预期。
如果可能有多个id符合条件那么。。

FILENAME = '/Volumes/G-Drive/input.csv'

d = {}

_max = 0

with open(FILENAME) as csv:
    next(csv) # skip header
    for row in csv:
        k, n = row.split(',')
        d.setdefault(k, []).append(n)
        _max = max(_max, len(d[k]))

print(*[k for k, v in d.items() if len(v) == _max])

相关问题