有没有比bdate_range()更好的方法来测量两个日期之间通过熊猫的工作日?
df = pd.DataFrame({ 'A' : ['1/1/2013', '2/2/2013', '3/3/2013'],
'B': ['1/12/2013', '4/4/2013', '3/3/2013']})
print df
df['A'] = pd.to_datetime(df['A'])
df['B'] = pd.to_datetime(df['B'])
f = lambda x: len(pd.bdate_range(x['A'], x['B']))
df['DIFF'] = df.apply(f, axis=1)
print df
Run Code Online (Sandbox Code Playgroud)
输出:
A B
0 1/1/2013 1/12/2013
1 2/2/2013 4/4/2013
2 3/3/2013 3/3/2013
A B DIFF
0 2013-01-01 00:00:00 2013-01-12 00:00:00 9
1 2013-02-02 00:00:00 2013-04-04 00:00:00 44
2 2013-03-03 00:00:00 2013-03-03 00:00:00 0
Run Code Online (Sandbox Code Playgroud)
谢谢!
我需要数据帧,df1有列A,B,C,D ......而df2有列A,B,E,F ...
我要合并的键位于A列.在两个数据帧中B也(很可能)是相同的.虽然这是一个大数据集,但我正在进行清洁,所以我对所有内容都没有非常好的概述.
我做
merge(df1, df2, on='A')
Run Code Online (Sandbox Code Playgroud)
结果包含一个名为B_x的列.由于数据集是大而凌乱我没有试图研究如何B_X不同于乙在DF1和乙在DF2
所以我的问题只是一般性的:当Pandas将_x附加到合并数据框中的列名时,它意味着什么?
谢谢
我有一个pandas DataFrame df:
import pandas as pd
data = {"Name": ["AAAA", "BBBB"],
"C1": [25, 12],
"C2": [2, 1],
"C3": [1, 10]}
df = pd.DataFrame(data)
df.set_index("Name")
Run Code Online (Sandbox Code Playgroud)
打印时看起来像这样(供参考):
C1 C2 C3
Name
AAAA 25 2 1
BBBB 12 1 10
Run Code Online (Sandbox Code Playgroud)
我想选择哪些行C1,C2并且C3在0和之间有值20.
你能建议一种优雅的方式来选择这些行吗?
添加背景渐变的pandas样式选项非常适合快速检查输出表.但是,它可以按行方式或按列方式应用.是否可以立即将其应用于整个数据框?
编辑:最低工作示例:
df = pd.DataFrame([[3,2,10,4],[20,1,3,2],[5,4,6,1]])
df.style.background_gradient()
Run Code Online (Sandbox Code Playgroud) 我想从一个简单的Pandas DataFrame创建一些NetworkX图:
Loc 1 Loc 2 Loc 3 Loc 4 Loc 5 Loc 6 Loc 7
Foo 0 0 1 1 0 0 0
Bar 0 0 1 1 0 1 1
Baz 0 0 1 0 0 0 0
Bat 0 0 1 0 0 1 0
Quux 1 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
哪里Foo…是指数,并Loc 1以Loc 7是列.但转换为Numpy矩阵或重新排列似乎不适用于生成输入nx.Graph().是否有实现这一目标的标准策略?我不反对重新格式化Pandas中的数据 - >转储到CSV - >导入到NetworkX,但似乎我应该能够从索引和值中的节点生成边缘.
这是一个相当微不足道的问题,但它触发了我的强迫症,而我在过去的半小时内未能找到合适的解决方案.
对于背景,我希望为DataFrame中的每个组计算一个值(我们称之为F),该值来自现有DataFrame中不同的聚合度量列.
这是我正在尝试做的一个玩具示例:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['X', 'Y', 'X', 'Y', 'Y', 'Y', 'Y', 'X', 'Y', 'X'],
'B': ['N', 'N', 'N', 'M', 'N', 'M', 'M', 'N', 'M', 'N'],
'C': [69, 83, 28, 25, 11, 31, 14, 37, 14, 0],
'D': [ 0.3, 0.1, 0.1, 0.8, 0.8, 0. , 0.8, 0.8, 0.1, 0.8],
'E': [11, 11, 12, 11, 11, 12, 12, 11, 12, 12]
})
df_grp = df.groupby(['A','B'])
df_grp.apply(lambda x: x['C'].sum() * …Run Code Online (Sandbox Code Playgroud) 我有一个dataFrame有几个coulmns,所以我选择了一些coulmns来创建一个这样的变量xtrain = df[['Age','Fare', 'Group_Size','deck', 'Pclass', 'Title' ]]我想从这些coulmns中删除所有原始数据,主数据框架中的Survive coulmn是nan.
我无法弄清楚如何正确地编写/读取系列...以下(以及它的许多变体)导致读取系列与书面系列不同...请注意,该系列被读入DataFrame而不是比一系列.
In [55]: s = pd.Series({'a': 1, 'b': 2})
In [56]: s
Out[56]:
a 1
b 2
In [57]: s.to_csv('/tmp/s.csv')
In [58]: !cat /tmp/s.csv
a,1
b,2
In [59]: pd.read_csv('/tmp/s.csv')
Out[59]:
a 1
0 b 2
Run Code Online (Sandbox Code Playgroud) 考虑一下你有一些不均匀的时间序列数据:
import pandas as pd
import random as randy
ts = pd.Series(range(1000),index=randy.sample(pd.date_range('2013-02-01 09:00:00.000000',periods=1e6,freq='U'),1000)).sort_index()
print ts.head()
2013-02-01 09:00:00.002895 995
2013-02-01 09:00:00.003765 499
2013-02-01 09:00:00.003838 797
2013-02-01 09:00:00.004727 295
2013-02-01 09:00:00.006287 253
Run Code Online (Sandbox Code Playgroud)
假设我想在1毫秒的窗口上进行滚动总和来得到这个:
2013-02-01 09:00:00.002895 995
2013-02-01 09:00:00.003765 499 + 995
2013-02-01 09:00:00.003838 797 + 499 + 995
2013-02-01 09:00:00.004727 295 + 797 + 499
2013-02-01 09:00:00.006287 253
Run Code Online (Sandbox Code Playgroud)
目前,我把所有东西都重新投入了多头并在cython中完成,但这在纯大熊猫中是否可行?我知道你可以做类似.asfreq('U')之类的东西,然后填充并使用传统的功能,但是一旦你拥有超过玩具的行数,这就无法扩展.
作为参考,这是一个hackish,而不是快速的Cython版本:
%%cython
import numpy as np
cimport cython
cimport numpy as np
ctypedef np.double_t DTYPE_t
def rolling_sum_cython(np.ndarray[long,ndim=1] times, np.ndarray[double,ndim=1] to_add, long window_size):
cdef …Run Code Online (Sandbox Code Playgroud) 我希望能够为dplyr动词定义参数
condition <- "dist > 50"
Run Code Online (Sandbox Code Playgroud)
然后在dplyr函数中使用这些字符串:
require(ggplot2)
ds <- cars
ds1 <- ds %>%
filter (eval(condition))
ds1
Run Code Online (Sandbox Code Playgroud)
但它会引发错误
Error: filter condition does not evaluate to a logical vector.
Run Code Online (Sandbox Code Playgroud)
代码应评估为:
ds1<- ds %>%
filter(dist > 50)
ds1
Run Code Online (Sandbox Code Playgroud)
导致 :
DS1
speed dist
1 14 60
2 14 80
3 15 54
4 18 56
5 18 76
6 18 84
7 19 68
8 20 52
9 20 56
10 20 64
11 22 66
12 …Run Code Online (Sandbox Code Playgroud)