如何解决熊猫数据框显示具有所需条件的行
我目前正在通过python处理定量代码。我最近一直在使用数据帧,直到昨天,一个令人毛骨悚然的故障严重打击了我,而且我很迷失如何获得期望的结果:
这是DOM:
ts_code end_date fcff roe_yearly roa_dp roic_yearly roe_yoy q_op_qoq
0 603000.SH 20191231 1.041476e+08 10.8941 7.6454 12.6005 47.5085 356.2437
1 603000.SH 20190930 -1.431920e+08 4.2044 2.2306 4.8479 31.2632 -25.7032
2 603000.SH 20190630 -2.267375e+08 2.9238 1.0385 3.5750 276.4166 449.9221
3 603000.SH 20190331 -3.097644e+08 -3.1372 -0.5800 -3.7248 62.9496 -116.0415
4 603000.SH 20181231 1.775266e+08 7.4066 5.4977 8.3623 122.7574 71.7184
5 603000.SH 20180930 3.023451e+07 3.2345 1.8423 3.8565 307.8660 98.3655
6 603000.SH 20180630 -1.042179e+08 -1.6766 -0.6451 -1.1682 19.8322 186.0172
7 603000.SH 20180331 -2.138164e+08 -8.4060 -1.6109 -8.4708 -27.0477 -167.3619
8 603000.SH 20171231 3.593505e+08 3.2401 2.4328 3.4555 -17.1973 76.1037
9 603000.SH 20170930 -2.170032e+07 0.7884 0.4471 1.0209 -78.5932 49.9168
10 603000.SH 20170630 2.299095e+07 -2.0970 -0.7922 -1.9708 -188.7621 156.7807
11 603000.SH 20170331 -6.089507e+07 -6.6504 -1.2439 -7.7056 -217.9714 -485.1622
12 603000.SH 20161231 -8.746122e+08 3.9054 2.9030 6.4299 -61.9080 -69.2861
13 603000.SH 20160930 -8.630607e+08 3.7055 2.1016 6.8464 -51.4469 2306.0770
14 603000.SH 20160630 -2.855617e+08 2.3550 0.8761 7.2218 -49.3369 -101.6762
15 603000.SH 20160331 -3.922060e+08 5.7132 1.0855 14.7152 103.8043 -2.5653
16 603000.SH 20151231 -1.632709e+08 10.4885 7.7055 12.7376 -21.8468 14.4998
我要过滤掉的是年度报告,该报告仅显示df['end_date']
个匹配的行,其日期为1231年。谁能给我一个方向来解决这个问题?非常感谢!
解决方法
第一个想法是将值转换为字符串并通过索引来选择值-前4个数字后的值,按1234
字符串进行比较,并按boolean indexing
进行过滤:
df1 = df[df['end_date'].astype(str).str[4:].eq('1231')]
print (df1)
ts_code end_date fcff roe_yearly roa_dp roic_yearly \
0 603000.SH 20191231 104147600.0 10.8941 7.6454 12.6005
4 603000.SH 20181231 177526600.0 7.4066 5.4977 8.3623
8 603000.SH 20171231 359350500.0 3.2401 2.4328 3.4555
12 603000.SH 20161231 -874612200.0 3.9054 2.9030 6.4299
16 603000.SH 20151231 -163270900.0 10.4885 7.7055 12.7376
roe_yoy q_op_qoq
0 47.5085 356.2437
4 122.7574 71.7184
8 -17.1973 76.1037
12 -61.9080 -69.2861
16 -21.8468 14.4998
具有日期时间的解决方案-首先进行转换,然后到Series.dt.strftime
才能获得数天的月份:
df1 = df[pd.to_datetime(df['end_date'],format='%Y%m%d').dt.strftime('%m%d').eq('1231')]
,
这可以通过字符串操作来完成:
df[df.end_date.astype(str).str.endswith("1231")]
结果
ts_code end_date fcff roe_yearly roa_dp roic_yearly roe_yoy q_op_qoq
0 603000.SH 20191231 104147600.0 10.8941 7.6454 12.6005 47.5085 356.2437
4 603000.SH 20181231 177526600.0 7.4066 5.4977 8.3623 122.7574 71.7184
8 603000.SH 20171231 359350500.0 3.2401 2.4328 3.4555 -17.1973 76.1037
12 603000.SH 20161231 -874612200.0 3.9054 2.9030 6.4299 -61.9080 -69.2861
16 603000.SH 20151231 -163270900.0 10.4885 7.7055 12.7376 -21.8468 14.4998
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。