给定具有时间序列的数据框,如下所示:
Close
2015-02-20 14:00:00 1200.1
2015-02-20 14:10:00 1199.8
2015-02-21 14:00:00 1199.3
2015-02-21 14:10:00 1199.0
2015-02-22 14:00:00 1198.4
2015-02-22 14:10:00 1199.7
Run Code Online (Sandbox Code Playgroud)
我怎样才能摆脱索引的'秒',看起来像这样:
Close
2015-02-20 14:00 1200.1
2015-02-20 14:10 1199.8
2015-02-21 14:00 1199.3
2015-02-21 14:10 1199.0
2015-02-22 14:00 1198.4
2015-02-22 14:10 1199.7
Run Code Online (Sandbox Code Playgroud)
谢谢
我有以下字典与数据帧
A = pd.DataFrame([[2, 1], [2, 1], [2, 1]], columns=['A', 'B'], index = [1, 2, 3])
B = pd.DataFrame([[1, 1], [2, 2], [3, 3]], columns=['A', 'B'], index = [1, 2, 3])
C = pd.DataFrame([[1, 2], [1, 2], [1, 2]], columns=['A', 'B'], index = [1, 2, 3])
df_all = {'df1': A, 'df2': B, 'df3': C}
Run Code Online (Sandbox Code Playgroud)
我想通过它们的索引合并它们'inner',但是使用for循环迭代它们.它必须等同于做
df4 = pd.merge(A, B, left_index=True, right_index=True, how='inner')
df5 = pd.merge(df4, C, left_index=True, right_index=True, how='inner')
Run Code Online (Sandbox Code Playgroud)
结果看起来像
A_x B_x A_y B_y A B
1 2 1 1 …Run Code Online (Sandbox Code Playgroud) 我有一个数据帧,我需要根据2个条件进行拆分,并将此条件应用于3个不同的列,然后使用这些新拆分以成对方式对其他列执行某些计算.
所以我有一个df A.
A = pd.DataFrame([[1, 5, 2, 3, 4, 1], [2, 4, 4, 5, 5, 1], [3, 3, 1, 2, 5, 4], [4, 2, 2, 3, 5, 5], [5, 1, 4, 2, 3, 1]],
columns=['A', 'B', 'C', 'D', 'E', 'F'], index=[1, 2, 3, 4, 5])
Run Code Online (Sandbox Code Playgroud)
我需要根据2个条件拆分数据框并应用于前三列,如下所示
condition1_colA = A[A['A'] > 1]
condition2_colA = A[A['A'] < 1]
condition1_colB = A[A['B'] > 1]
condition2_colB = A[A['B'] < 1]
condition1_colC = A[A['C'] > 1]
condition2_colC = A[A['C'] < 1]
Run Code Online (Sandbox Code Playgroud)
现在,我需要对6个新切片数据帧中的每一个进行3次计算,但是这个计算按以下方式配对:
我有正常的df
A = pd.DataFrame([[1, 5, 2], [2, 4, 4], [3, 3, 1], [4, 2, 2], [5, 1, 4]],
columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5])
Run Code Online (Sandbox Code Playgroud)
按照这个方法,我得到了我想要的结果.
In [62]: A.groupby((A['A'] > 2)).apply(lambda x: pd.Series(dict(
up_B=(x.B >= 0).sum(), down_B=(x.B < 0).sum(), mean_B=(x.B).mean(), std_B=(x.B).std(),
up_C=(x.C >= 0).sum(), down_C=(x.C < 0).sum(), mean_C=(x.C).mean(), std_C=(x.C).std())))
Out[62]:
down_B down_C mean_B mean_C std_B std_C up_B up_C
A
False 0 0 4.5 3.000000 0.707107 1.414214 2 2
True 0 0 2.0 2.333333 1.000000 1.527525 3 3 …Run Code Online (Sandbox Code Playgroud) 遵循这个食谱.我'转向'一个看起来像这样的数据框:
Close
2015-02-20 14:00:00 1200.1
2015-02-20 14:10:00 1199.8
2015-02-21 14:00:00 1199.3
2015-02-21 14:10:00 1199.0
2015-02-22 14:00:00 1198.4
2015-02-22 14:10:00 1199.7
Run Code Online (Sandbox Code Playgroud)
把它变成了这个:
14:00 14:10
2015-02-20 1200.1 1199.8
2015-02-21 1199.3 1199.0
2015-02-22 1198.4 1199.7
Run Code Online (Sandbox Code Playgroud)
但是,现在我想要在列之间进行简单的计算,例如:
df['Chg'] = df['14:10:00'] - df['14:00:00']
Run Code Online (Sandbox Code Playgroud)
我得到一个KeyError,因为在'pivoting'之后,列名是datetime.time数据.
In [1]: df_pivot.columns.tolist()
Out [2]:
[datetime.time(14, 0),
datetime.time(14, 10)]
Run Code Online (Sandbox Code Playgroud)
如何修改我的透视数据框,这样我就可以在列之间进行简单的计算.我猜这意味着将列名的格式从datetime.time更改为str.
谢谢
我有一个很大的功能,它的输出是一个数据框和2个图表。像这样:
summary = pd.concat([mean, std], axis=1)
chart1 = sns.tsplot(sample['x'].cumsum())
chart2 = sns.tsplot(summary['mean'])
result = [summary, chart1, chart2]
return result
Run Code Online (Sandbox Code Playgroud)
一切正常,除了,我只得到一张包含两个时间序列的图表。我想得到两个单独的图表。我该怎么做呢?
谢谢
如何在这段代码中替换.ix?
df_1 = df.ix[:, :datetime.time(16, 50)]
df_2 = df.ix[:, datetime.time(17, 0) : ]
df_3 = df2.shift(periods = 1)
df_4 = pd.concat([df3, df1], axis = 1)
Run Code Online (Sandbox Code Playgroud)
给定df:
Date and Time,Open,High,Low,Close
07/13/2017 15:55,1.1436,1.1436,1.1436,1.1436
07/13/2017 15:56,1.1435,1.1435,1.1435,1.1435
07/13/2017 15:57,1.1434,1.1434,1.1434,1.1434
07/13/2017 15:58,1.1436,1.1436,1.1436,1.1436
07/13/2017 15:59,1.1437,1.1437,1.1437,1.1437
Run Code Online (Sandbox Code Playgroud)
我如何扩展索引并用最后一行的值填充数据框,结果输出将如下所示:
以1分钟的频率延长df 24h:
Date and Time,Open,High,Low,Close
07/13/2017 15:55,1.1436,1.1436,1.1436,1.1436 |
07/13/2017 15:56,1.1435,1.1435,1.1435,1.1435 |
07/13/2017 15:57,1.1434,1.1434,1.1434,1.1434 | --> Existing Data
07/13/2017 15:58,1.1436,1.1436,1.1436,1.1436 |
07/13/2017 15:59,1.1437,1.1437,1.1437,1.1437 |
07/13/2017 16:00,1.1437,1.1437,1.1437,1.1437
07/13/2017 16:02,1.1437,1.1437,1.1437,1.1437
07/13/2017 16:03,1.1437,1.1437,1.1437,1.1437
...
...
...
07/14/2017 15:57,1.1437,1.1437,1.1437,1.1437
07/14/2017 15:58,1.1437,1.1437,1.1437,1.1437
07/14/2017 15:59,1.1437,1.1437,1.1437,1.1437
Run Code Online (Sandbox Code Playgroud) 给定 df
Date Time Data
3 2017-08-10 15:15:00 a
0 2017-08-11 15:15:00 b
1 2017-08-12 15:15:00 c
2 2017-08-13 15:15:00 d
1 2017-08-14 15:15:00 e
Run Code Online (Sandbox Code Playgroud)
和
print (type(df['Date'].iat[0]))
<class 'datetime.date'>
print (type(df['Time'].iat[0]))
<class 'datetime.time'>
Run Code Online (Sandbox Code Playgroud)
如何将 df.Date 和 df.Time 合并到作为日期时间对象的 DateTime 列中?:
Date Time Data DateTime
3 2017-08-10 15:15:00 a 2017-08-10 15:15:00
0 2017-08-11 15:15:00 b 2017-08-11 15:15:00
1 2017-08-12 15:15:00 c 2017-08-12 15:15:00
2 2017-08-13 15:15:00 d 2017-08-13 15:15:00
1 2017-08-14 15:15:00 e 2017-08-14 15:15:00
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
df['DateTime'] = df.apply(lambda r …Run Code Online (Sandbox Code Playgroud) 给定一个数据帧df,(现实生活是+1000行df).元素ColB是列表列表.
ColA ColB
0 'A' [['a','b','c'],['d','e','f']]
1 'B' [['f','g','h'],['i','j','k']]
2 'A' [['l','m','n'],['o','p','q']]
Run Code Online (Sandbox Code Playgroud)
如何ColC使用不同列中的元素有效地创建一个字符串,如下所示:
ColC
'A>+a b:c,+d e:f'
'B>+f g:h,+i j:k'
'A>+l m:n,+o p:q'
Run Code Online (Sandbox Code Playgroud)
我尝试了df.apply这些方法,灵感来自于:
df['ColC'] = df.apply(lambda x:'%s>' % (x['ColA']),axis=1)
Run Code Online (Sandbox Code Playgroud)
这适用于字符串的前2个元素.其余的都很难过.
pandas ×10
python ×10
dataframe ×9
time-series ×3
python-3.x ×2
datetime ×1
deprecated ×1
dictionary ×1
for-loop ×1
group-by ×1
indexing ×1
pivot-table ×1
python-2.7 ×1
seaborn ×1
split ×1
string ×1
subset ×1