我对熊猫问题有疑问:
所以我有一个如下数据框:
timestamp user exercises
2018-01-01 John 7
2018-01-01 Mary 9
2018-02-01 John 3
2018-02-01 Mary 2
2018-03-01 John 1
2018-03-01 Mary 5
2019-01-01 John 3
2019-01-01 Mary 4
2019-02-01 John 2
2019-02-01 Mary 5
2020-01-01 John 6
2020-01-01 Mary 2
2020-02-01 John 1
2020-02-01 Mary 2
我需要获得一个输出数据框,该数据框是给定数据框的子集,但它必须仅保留2018年的数据,像这样:
timestamp user exercises
2018-01-01 John 7
2018-01-01 Mary 9
2018-02-01 John 3
2018-02-01 Mary 2
2018-03-01 John 1
2018-03-01 Mary 5
关于如何从给定数据框中获取此输出数据框的任何想法?
非常感谢您。
任何帮助将不胜感激。
答案 0 :(得分:1)
尝试:
import pandas as pd
import datetime as dt
df = pd.DataFrame({"timestamp": ['2018-01-01',
'2018-01-01',
'2019-01-01',
'2020-01-01'],
"user": ['john', 'mary', 'john', 'mary'],
'exercises': [7,9,3,2]},)
df['timestamp'] = pd.to_datetime(df['timestamp'])
df[df['timestamp'].dt.year == 2018]
输入
timestamp user exercises
0 2018-01-01 john 7
1 2018-01-01 mary 9
2 2019-01-01 john 3
3 2020-01-01 mary 2
输出
timestamp user exercises
0 2018-01-01 john 7
1 2018-01-01 mary 9
答案 1 :(得分:0)
Control_MouseDoubleClick_1
尝试类似的方法,让我知道是否有帮助。
答案 2 :(得分:0)
使用Series.dt.year
仅选择2018年:
# df['timestamp'] = pd.to_datetime(df['timestamp'])
df_new = df[df['timestamp'].dt.year == 2018]
print(df_new)
timestamp user exercises
0 2018-01-01 John 7
1 2018-01-01 Mary 9
2 2018-02-01 John 3
3 2018-02-01 Mary 2
4 2018-03-01 John 1
5 2018-03-01 Mary 5
答案 3 :(得分:0)
如果您喜欢lambda,可以在下面使用:
如果时间戳是字符串:
df.loc[lambda df: df.timestamp.str[:4] == '2018']
如果时间戳记是日期:
df.loc[lambda df: (pd.to_datetime(df.timestamp)).dt.year == 2018]
答案 4 :(得分:0)
您的索引是DatetimeIndex
吗?如果是这样,您可以致电data.loc["2018"]
。在内部,pandas
将“ 2018”视为2018年,并且由于.loc
切片在两个边上都包含在内,因此请选择该年中的所有数据。