- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个根据股票数据创建的数据框。我正在使用数据透视表按月和按年计算“关闭 > 打开”的次数。如果我每个月都使用整数,我的表的顺序是正确的。如果我每个月都使用 3 个字母的缩写,它会按字母顺序排序。如何让月份缩写以正确的顺序出现?我确信有一个简单的解决方案。
这是我的代码:
data = pd.read_csv('SPY.CSV')
data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)
data['UpClose'] = np.where(data['Close'] > data['Open'], 1, 0)
data['Year'] = data.index.year
data['Month'] = data.index.month
data['Month'] = pd.to_datetime(data['Month'], format='%m').dt.month_name().str.slice(stop=3)
table = pd.pivot_table(data, values='UpClose', index=['Year'],columns=['Month'], aggfunc=np.sum).reset_index().rename_axis(None, axis=1)
输出(按字母顺序排列的月份缩写名称):
Year Apr Aug Dec Feb Jan Jul Jun Mar May Nov Oct Sep
0 1997 NaN NaN 10.0 NaN NaN NaN NaN NaN NaN 12.0 9.0 7.0
1 1998 10.0 8.0 12.0 11.0 11.0 11.0 13.0 13.0 9.0 12.0 12.0 11.0
2 1999 11.0 11.0 15.0 9.0 10.0 10.0 13.0 13.0 10.0 11.0 12.0 7.0
3 2000 7.0 15.0 10.0 9.0 8.0 10.0 11.0 14.0 9.0 8.0 11.0 7.0
如果我使用整数而不是月份缩写,这是正确的顺序:
Year 1 2 3 4 5 6 7 8 9 10 11 12
0 1997 NaN NaN NaN NaN NaN NaN NaN NaN 7.0 9.0 12.0 10.0
1 1998 11.0 11.0 13.0 10.0 9.0 13.0 11.0 8.0 11.0 12.0 12.0 12.0
2 1999 10.0 9.0 13.0 11.0 10.0 13.0 10.0 11.0 7.0 12.0 11.0 15.0
3 2000 8.0 9.0 14.0 7.0 9.0 11.0 10.0 15.0 7.0 11.0 8.0 10.0
期望的输出(按正确顺序排列的月份缩写):
Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
0 1997 NaN NaN NaN NaN NaN NaN NaN NaN 7.0 9.0 12.0 10.0
1 1998 11.0 11.0 13.0 10.0 9.0 13.0 11.0 8.0 11.0 12.0 12.0 12.0
2 1999 10.0 9.0 13.0 11.0 10.0 13.0 10.0 11.0 7.0 12.0 11.0 15.0
3 2000 8.0 9.0 14.0 7.0 9.0 11.0 10.0 15.0 7.0 11.0 8.0 10.0
最佳答案
正如 WeNYoBen 评论的那样,实现字符串自定义排序的一种方法是通过有序分类。
另一件需要注意的事情是,您可以对 bool 值 (True=1, False=0) 进行数值运算(例如求和),因此 np.where(data['Close'] > data['Open '], 1, 0)
真的没必要,data['Close'] > data['Open']
就行了
import numpy as np
import pandas_datareader as pdr # Get SPY Data
from pandas.api.types import CategoricalDtype
# Define month order
month_lst = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
# Create ordered month
cat_type = CategoricalDtype(categories=month_lst, ordered=True)
data = (pdr.get_data_yahoo('SPY',start='1997',end='2001')
.assign(UpClose=lambda x:x.Close > x.Open,
Year=lambda x:x.index.year,
Month=lambda x:x.index.month_name().astype(cat_type))
.pivot_table(index='Year',columns='Month',values='UpClose',aggfunc=np.sum))
关于python - 对 Dataframe 中的每月缩写列(Jan、Feb、Mar 等)进行排序(目前按字母顺序排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57598032/
public static void main(String[] args) { String opDate = "Tue Jan 03 00:00:00 MSK 2006"; Str
您好,在我的表格中,我将日期保存为“2010-12-01”,即,但我想将上述日期转换为“2010 年 12 月”..您能建议我如何转换吗? 提前致谢 最佳答案 如果您使用的是 php,请执行以下操作:
我有一个 csv 文件,第一列(名为“月”)的格式为月份数据 “Jan\n1990”、“Feb\n1990”等等。 当我使用 read.csv 函数(使用 stringsAsFactors = FAL
如何将以下字符变量转换为日期? strDates strDates strptime(paste("01", strDates), "%d %b.%Y") [1] "2008-01-01" "20
我面临日期验证问题。我使用以下正则表达式仅以 dd-mmm-yyyy 格式输入日期 dateValidatorRegex = /^(\d{1,2})(-)(?:(\(jan)|(feb)|(mar)|
我想从字符串中提取日期: 15/Nov/2013 05/Jan/2014 然后像这样重新格式化 15/11/2013 05/01/2014 是否有现成的函数(已经“知道”月份:一月、二月等)? 最佳答
如果导入库以使用方法,是否值得?导入会占用大量内存吗? 最佳答案 从here借来的 %mon2num = qw( jan 1 feb 2 mar 3 apr 4 may 5 jun
我本以为这是: .datepicker({ dateFormat: 'dd-mmm-yyyy' }); 一个月以来,我得到了一些我不明白它们来自哪里的数字? 最佳答案 根据the documentat
我想在Go中使用“2020年12月31日”格式的日期。 我正在使用以下代码行来获取上述格式的时间。 time := 2020-12-31 wantedFormat := time.Format("2n
我正在搜索一个 SQl 查询,它为我提供在特定时间具有 max() 的所有值。 这是我的简化表格: +---------+-------+-------+ | name | va
我在数据库中有一个日期时间列。 DateTime end_date = DateTime.ParseExact("2013-Jan-31", "yyyy-MM-dd", CultureInfo.Inv
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我有一个数据框,其中一段时间的开始日期和结束日期为yyyy-mm,我想要一个新列,其中包含一段时间 - 例如开始新列中 2019-01 的日期和 2019-12 的结束日期将是 Cal-19,想要
我想不通这个愚蠢的小错误。每当我启动 DatePickerDialog 时,默认设置日期为 Jan/01/1900。 这很奇怪,因为在平板电脑上, slider 旁边有一个日历 View ,您也可以从
数字格式类别:为什么它被识别为自定义? 在以下平台上测试 Mac 上的 Excel (16.37) Windows 上的 Excel(2002 版) 在线Excel 我的客户问一个问题:当他在单元格中
我有一个每日动物园 (xts),其中包含以下格式的几十年数据: head(almorol) 1973-10-02 1973-10-03 1973-10-04 1973-10-05 1973-10-06
这个问题已经有答案了: Where can I find documentation on formatting a date in JavaScript? (39 个回答) 已关闭 9 年前。 当我
我在 MySQL 日期 (varchar) 列中具有日期格式:“01/Jan/2015”。我想将其转换为“01012015”格式。 这在 MySQL 日期格式中可能吗? 最佳答案 是的,您需要使用st
我有一个格式为 in = "01012012"的字符串。我希望它转换为:01-JAN-12。我如何在 C# 中实现它? 最佳答案 DateTime dateTime = DateTime.ParseE
使用我使用的 greenDAO 生成器: entity.addDateProperty("date").notNull(); 我插入值:'2013-10-30',当我检查我的数据库时,我在那里有值。我
我是一名优秀的程序员,十分优秀!