gpt4 book ai didi

python - 有没有办法对包含列表的数据框列进行排序?

转载 作者:行者123 更新时间:2023-12-05 03:34:16 25 4
gpt4 key购买 nike

我在数据框中有一列包含列表数据

例如:

enter code here
| Column 1 | Column 2 |
|--------- |---------------------------|
| 1 | ['jan'] |
| 2 | ['jan','feb'] |
| 3 | ['feb','jan'] |
| 4 | ['mar','april','jan'] |
| 5 | ['jan','mar','april'] |
| 6 | ['jan','feb','mar'] |
| 7 | ['jan','feb','mar'] |

如上表所示,我们可以看到第 2 列、第 2 行和第 3 行具有相同的列表,但顺序不同。其他值也是如此。像(第 4 行和第 5 行)

我必须按这个顺序排序

enter code here ['oct' ,'nov' ,'dec' ,'jan' ,'feb' ,'march' ,'april']

所需的输出应如下所示,一个新的第 3 列,其中包含已排序的值

enter code here
| Column 1 | Column 2 | Column 3 |
|--------- |---------------------------|---------------------------|
| 1 | ['oct'] | ['oct'] |
| 2 | ['oct','nov'] | ['oct','nov'] |
| 3 | ['nov','oct'] | ['oct','nov'] |
| 4 | ['mar','april','jan'] | ['jan','mar','april'] |
| 5 | ['jan','mar','april'] | ['jan','mar','april'] |
| 6 | ['jan','feb','mar'] | ['jan','feb','mar'] |
| 7 | ['jan','feb','mar'] | ['jan','feb','mar'] |

最佳答案

使用 sorted 通过 enumerate 创建字典:

#import ast

#converted to lists if necessary
df['Column 2'] = df['Column 2'].apply(ast.literal_eval)

months = ['oct' ,'nov' ,'dec' ,'jan' ,'feb' ,'mar' ,'april']

d = {v: k for k, v in enumerate(months)}

df['Column 2'] = df['Column 2'].apply(lambda x: sorted(x, key=lambda y: d[y]))
print (df)
Column 1 Column 2
0 1 [jan]
1 2 [jan, feb]
2 3 [jan, feb]
3 4 [jan, mar, april]
4 5 [jan, mar, april]
5 6 [jan, feb, mar]
6 7 [jan, feb, mar]

如果值是前 3 个字母,则可以按日期时间排序:

df['Column 2'] = df['Column 2'].apply(lambda x: sorted(x, key=lambda y: pd.to_datetime(y, format='%b')))
print (df)
Column 1 Column 2
0 1 [jan]
1 2 [jan, feb]
2 3 [jan, feb]
3 4 [jan, mar, apr]
4 5 [jan, mar, apr]
5 6 [jan, feb, mar]
6 7 [jan, feb, mar]

关于python - 有没有办法对包含列表的数据框列进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70214558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com