小编JJ *_*ica的帖子

计算两个系列之间的工作日

有没有比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)

谢谢!

python pandas

17
推荐指数
1
解决办法
7480
查看次数

Pandas的合并返回一个列,其中_x附加到名称

我需要数据帧,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不同于DF1DF2

所以我的问题只是一般性的:当Pandas将_x附加到合并数据框中的列名时,它意味着什么?

谢谢

python pandas

16
推荐指数
1
解决办法
2万
查看次数

根据pandas数据帧中的多个列值选择行

我有一个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并且C30和之间有值20.

你能建议一种优雅的方式来选择这些行吗?

python pandas

16
推荐指数
4
解决办法
4万
查看次数

大熊猫风格背景渐变行和列

添加背景渐变的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)

python pandas

16
推荐指数
4
解决办法
8498
查看次数

从Pandas DataFrame构造NetworkX图

我想从一个简单的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 1Loc 7是列.但转换为Numpy矩阵或重新排列似乎不适用于生成输入nx.Graph().是否有实现这一目标的标准策略?我不反对重新格式化Pandas中的数据 - >转储到CSV - >导入到NetworkX,但似乎我应该能够从索引和值中的节点生成边缘.

python networkx pandas

15
推荐指数
2
解决办法
1万
查看次数

在groupby上设置应用结果的列名

这是一个相当微不足道的问题,但它触发了我的强迫症,而我在过去的半小时内未能找到合适的解决方案.

对于背景,我希望为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)

python pandas

15
推荐指数
3
解决办法
1万
查看次数

从DataFrame中的特定列中选择非空行,并对其他列进行子选择

我有一个dataFrame有几个coulmns,所以我选择了一些coulmns来创建一个这样的变量xtrain = df[['Age','Fare', 'Group_Size','deck', 'Pclass', 'Title' ]]我想从这些coulmns中删除所有原始数据,主数据框架中的Survive coulmn是nan.

python pandas

13
推荐指数
2
解决办法
2万
查看次数

如何在csv中编写/读取pandas系列?

我无法弄清楚如何正确地编写/读取系列...以下(以及它的许多变体)导致读取系列与书面系列不同...请注意,该系列被读入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)

python pandas

12
推荐指数
2
解决办法
2万
查看次数

滑动窗户上的熊猫滚动计算(间隔不均匀)

考虑一下你有一些不均匀的时间序列数据:

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)

python pandas

12
推荐指数
2
解决办法
6704
查看次数

在dplyr谓词中将字符串作为参数传递

我希望能够为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)

string r data-manipulation parameter-passing dplyr

12
推荐指数
2
解决办法
5409
查看次数