簡體   English   中英

Pandas Dataframe:對數據框中的列表列進行排序

[英]Pandas Dataframe: Sort list column in dataframe

我有如下數據框:

   |            types |     TypeList
0  |    Q11424 (item) |  Q11424 (item),Q571 (item)
1  |      Q571 (item) |  Q10 (item),Q24 (item)
0  |    Q11012 (item) |  Q3 (item)
0  |  Q4830453 (item) |  Q4 (item)
0  |  Q7725634 (item) |  Q67 (item),Q12 (item)

我想按升序對 TypeList 列中的元素進行排序。 即 typelist 的每一行都應該根據它的整數部分進行排序。 我基本上想要輸出如下:

   |            types |     TypeList
0  |    Q11424 (item) |  Q571 (item),Q11424 (item)
1  |      Q571 (item) |  Q10 (item),Q24 (item)
0  |    Q11012 (item) |  Q3 (item)
0  |  Q4830453 (item) |  Q4 (item)
0  |  Q7725634 (item) |  Q12 (item),Q67 (item)

我能夠從此 TypeList 列中刪除所有字符,只保留“,”分隔的字符串,並進一步將其轉換為列表,即此列的每一行現在都是類型字符串列表。 我想對此應用排序,所以我做了如下操作:

df.TypeList.apply(lambda x: (int(y) for y in x))

但它給出的結果數據幀具有所有行值

<generator object <lambda>.<locals>.<genexpr> ...

我不知道如何解決這個問題。 有人可以幫我解決它。

提前致謝。

import re
import operator

for i in df.index:
    x = df.loc[i,'TypeList']
    # x ==  'Q11424 (item),Q571 (item)'
    y = x.split(',')
    y = {int(re.search(r'(?<=Q)\d+', k).group(0)):k for k in y}
    # y == {11424: 'Q11424 (item)', 571: 'Q571 (item)'}
    sorted_y = sorted(y.items(), key=operator.itemgetter(0))
    # sorted_y == [(571, 'Q571 (item)'), (11424, 'Q11424 (item)')]
    sorted_x = ','.join([i[1] for i in sorted_y])
    # sorted_x == 'Q571 (item),Q11424 (item)'
    df.loc[i, 'TypeList'] = sorted_x

這個不使用apply ,因為我不熟悉它。 但我希望你能明白。

使用sorted參數key sorted

df = (df['TypeList'].str.split(',')
                   .apply(lambda x:  sorted(x, key=lambda y: int(y.split()[0][1:])))
                   .str.join(','))
print (df)

0    Q571 (item),Q11424 (item)
1        Q10 (item),Q24 (item)
2                    Q3 (item)
3                    Q4 (item)
4        Q12 (item),Q67 (item)
Name: TypeList, dtype: object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM