作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在数据框中有一列包含列表数据
例如:
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/
我是一名优秀的程序员,十分优秀!