[英]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.