小编Yuc*_*uca的帖子

pandas迭代更新列值

我有一个像下面这样的熊猫系列:

a = pd.Series([a1, a2, a3, a4, ...])

我想根据以下规则创建另一个熊猫系列:

b = pd.Series(a1, a2+a1**0.8, a3 + (a2 + a1**0.8)**0.8, a4 + (a3 + (a2 + a1**0.8)**0.8)**0.8, ...).

这是可行的使用迭代,但我有一个大型数据集(数百万条记录),我必须执行数千次操作(出于优化目的).我需要非常快速地完成这项操作.有没有可能通过使用pandasnumpy内置函数来实现这一点?

python iteration performance numpy pandas

7
推荐指数
1
解决办法
190
查看次数

子图的 matplotlib get_color

我正在关注这里的教程:https : //matplotlib.org/gallery/ticks_and_spines/multiple_yaxis_with_spines.html
但是,使用的示例是针对单个图的,我目前正在处理子图。我的版本如下:

    p1 = tr[names['equity']].plot(ax=ax3, linewidth = 0.75)
    axb = ax3.twinx()
    axb.spines["right"].set_position(("axes", 0.5))
    p2 = tr[names[local_rating]].plot(ax=axb, c= 'r', linewidth = 0.75)
    axb.grid(False)
    axb.margins(x=0)
    axc = ax3.twinx()    
    p3 = tr[names['vol']].plot(ax=axc, c = 'g', linewidth = 0.75)
    axc.grid(False)
    axc.margins(x=0)
    ax3.yaxis.label.set_color(p1.get_color())
    axb.yaxis.label.set_color(p2.get_color())
    axc.yaxis.label.set_color(p3.get_color())
Run Code Online (Sandbox Code Playgroud)

当我尝试执行 pX.get_color() 时,我得到:

AttributeError: 'AxesSubplot' 对象没有属性 'get_color'

我的问题是:我应该使用什么方法来恢复子图的颜色?

我知道我可以手动设置颜色来匹配,因为它是少量的指令,但我只是想知道是否有另一种方法。

谢谢

python matplotlib

6
推荐指数
1
解决办法
2591
查看次数

使用pandas GroupBy检查组中的所有元素是否相等

有没有一种pythonic方法可以按字段分组并检查每个结果组的所有元素是否具有相同的值?

样本数据:

              datetime rating  signal
0  2018-12-27 11:33:00     IG       0
1  2018-12-27 11:33:00     HY      -1
2  2018-12-27 11:49:00     IG       0
3  2018-12-27 11:49:00     HY      -1
4  2018-12-27 12:00:00     IG       0
5  2018-12-27 12:00:00     HY      -1
6  2018-12-27 12:49:00     IG       0
7  2018-12-27 12:49:00     HY      -1
8  2018-12-27 14:56:00     IG       0
9  2018-12-27 14:56:00     HY      -1
10 2018-12-27 15:12:00     IG       0
11 2018-12-27 15:12:00     HY      -1
12 2018-12-20 15:14:00     IG       0
13 2018-12-20 15:14:00     HY      -1
14 2018-12-20 15:50:00     IG      -1 …
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas pandas-groupby

5
推荐指数
2
解决办法
2009
查看次数

这是什么意思?xarray 错误:无法处理非唯一的多索引

我正在尝试将数据帧转换为 xarray。头部是这样的:

z   Class    DA       x          y          iline      xline      idz                                                      
2     651   289  1455.0        2.0        0.62239  2345322.0  76720.0
            290  1460.0        0.0        0.46037  2345322.0  76720.0
            291  1465.0        4.0        0.41280  2345322.0  76720.0
            292  1470.0        0.0        0.39540  2345322.0  76720.0
            293  1475.0        2.0        0.61809  2345322.0  76720.0
Run Code Online (Sandbox Code Playgroud)

当我使用xr.DataSet.from_dataframe, or 时df.to_xarray,我收到以下错误消息:

cannot handle a non-unique multi-index!

有人知道这里发生了什么吗?

python pandas python-xarray

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

类型错误:<lambda>() 在使用 apply 后跟 groupby 时获得意外的关键字参数“axis”

我试图从 pandas Dataframe 中提取由 ID 分割的值。但是,当我提供 apply groupby 时,它不会让我提供轴参数来按行应用函数

raw_data = {"id":{"0":"mergedshape_route_0009","1":"mergedshape_route_0009","2":"mergedshape_route_0009","3":"mergedshape_route_0009","4":"mergedshape_route_0009","5":"mergedshape_route_0009","6":"mergedshape_route_0009","7":"mergedshape_route_0009","8":"mergedshape_route_0009","9":"mergedshape_route_0009"},"shape_pt_lat":{"0":-6.8196991355,"1":-6.8194035167,"2":-6.8192916609,"3":-6.8192597021,"4":-6.8193262829,"5":-6.819395527,"6":-6.8194451,"7":-6.8192582,"8":-6.8184049,"9":-6.8177623},"shape_pt_lon":{"0":39.2987716198,"1":39.2989432812,"2":39.299055934,"3":39.29918468,"4":39.2993053794,"5":39.2993938923,"6":39.2994472,"7":39.2995691,"8":39.2999065,"9":39.2986298},"shape_pt_sequence":{"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9},"shape_dist_traveled":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0}}

df = pd.DataFrame(raw_data).groupby("id").apply(lambda row: row.shape_pt_lat, axis = 1)
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

TypeError                                 Traceback (most recent call last)
~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, func, *args, **kwargs)
    917             try:
--> 918                 result = self._python_apply_general(f)
    919             except Exception:

~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in _python_apply_general(self, f)
    935         keys, values, mutated = self.grouper.apply(f, self._selected_obj,
--> 936                                                    self.axis)
    937 

~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, f, data, axis)
   2272             group_axes = _get_axes(group)
-> 2273             res = f(group)
   2274             if not _is_indexed_like(res, group_axes):

~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

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

使用Panda的.at函数修改多行

我对的用法有些困惑at。从网站:

访问行/列标签对的单个值。

尽管如此,我仍然可以使用它来更改多行中的值。例如:

df = pd.DataFrame([[0, 2, 3], [0, 2, 1], [10, 20, 30]], index=[0, 1, 2], columns=['A', 'B', 'C'])

    A   B   C
0   0   2   3
1   0   2   1
2  10  20  30

idxs = df[df.B==2].index.values
df.at[idxs, 'A'] = -33

    A   B   C
0 -33   2   3
1 -33   2   1
2  10  20  30
Run Code Online (Sandbox Code Playgroud)

实际上,这将更改前两行(第列A)中的值。难道我做错了什么?使用at这种方式更改多行是否安全?

python dataframe pandas

5
推荐指数
1
解决办法
59
查看次数

`xlsxwriter` 线透明度不起作用,除非颜色改变

从文档中我看到可以对图表区域使用透明度。我想知道 XlsxWriter 是否支持折线图的透明度。语法:

chart.add_series({
    'name': 'something',
    'categories': [<excel range>],
    'values': [<excel range>],
    'line':   {'color': 'yellow','transparency': 25},
})
Run Code Online (Sandbox Code Playgroud)

以黄色显示我的折线图。但是,没有透明度。

那么,折线图可以透明吗?如果是这样,正确的语法是什么?

我在 Python 3.6.3 上运行 Excel 2016。另外值得一提的是我如何使用 xlsxwriter:

 writer = pd.ExcelWriter(path, engine='xlsxwriter', datetime_format='dd-mmm-yy')
Run Code Online (Sandbox Code Playgroud)

更新:

从接受的答案运行代码会产生所需的输出: 在此处输入图片说明 但是,如果线条构造中没有使用颜色参数,则透明度将不起作用:

import xlsxwriter

workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()

    # Create a new Chart object.
chart = workbook.add_chart({'type': 'line'})

# Write some data to add to plot on the chart.
data = [
    [1, 2, 3, 4, 5],
    [2, 4, 6, 8, 10],
    [3, 6, 9, 12, …
Run Code Online (Sandbox Code Playgroud)

python-3.x pandas xlsxwriter

4
推荐指数
1
解决办法
664
查看次数

matplotlib 在 Seaborn 下设置小刻度

我有以下代码来绘制一系列子图:

minorLocator = AutoMinorLocator()
fig, ax = plt.subplots(4, 2, figsize=(8, 12))

data = np.random.rand(20,5)
ax[1, 1].plot(data, alpha=0.5)
ax[1, 1].set_title('Simulation')    
ax[1, 1].xaxis.set_minor_locator(minorLocator)
Run Code Online (Sandbox Code Playgroud)

但是,这未能包括情节上的次要刻度“标记”。我也试过

ax[1, 1].plot(data, alpha=0.5)
ax[1, 1].xaxis.set_minor_locator(minorLocator)
ax[1, 1].xaxis.set_minor_formatter(NullFormatter())
Run Code Online (Sandbox Code Playgroud)

但它也失败了。由于我正在使用 seaborn 样式,因此我怀疑需要覆盖 Seaborn 参数,但我不确定如何。这是我的 Seaborn 实现

import seatborn as sns
sns.set()
Run Code Online (Sandbox Code Playgroud)

如何将“每日”标记添加到我的 x 轴?这些是我的情节的例子:

在此处输入图片说明

matplotlib python-3.x seaborn

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

why this python function return len=7 instead of len=6?

I got this code below, but even debugging it, I cannot understand why gives me out 7 instead of 6.

More precisely when I debudg every return gives me the expected result:

  1. first func call: ipdb> --Return-- ['a']
  2. second func call: ipdb> --Return-- ['a', 'a']
  3. third func call: ipdb> --Return-- ['a', 'a', 'a']

but at the end func() + func() + func() becomes ['a', 'a', 'a', 'a', 'a', 'a', 'a']

why is there one 'a' more???

#!/usr/bin/python
# -*- coding: …
Run Code Online (Sandbox Code Playgroud)

python-3.x

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

将 numpy 数组转换为数据帧

我有一个 numpy 数组,我想将其转换为数据框。

import numpy as np
import pandas as pd    
nparray = np.array([[1,2,3,4,5],[6,7,8,9,10]])
Run Code Online (Sandbox Code Playgroud)

如何将其转换为数据框,其中数据如下:

col1 col2
1      6
2      7
3      8
4      9
5      10
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

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

熊猫滚动corr,没有重叠

我有几个价格回报系列,我想以一种在日期之间没有重叠的方式来计算N天的滚动相关性,即,如果我的第一个相关性矩阵属于[2000-04-05-2000-06- 04],则下一个相关矩阵应属于[2000-06-05-2000-08-04]。使用常规的df.rolling(window = window).corr(df,pairwise = True)将返回重叠的日期。

我知道将滚动方法的结果切成薄片会得到我想要的东西,但这意味着我们浪费时间来计算我不会使用的相关性,从而浪费了资源。

有什么建议么?

更新:

这是输入的示例:

在此处输入图片说明

更新2:

outputs for pd.show_versions()
INSTALLED VERSIONS
------------------
commit: None
python: 3.6.3.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 63 Stepping 2, GenuineIntel
byteorder: little
LC_ALL: None
LANG: en
LOCALE: None.None

pandas: 0.20.3
pytest: 3.2.1
pip: 9.0.1
setuptools: 36.5.0.post20170921
Cython: 0.26.1
numpy: 1.14.5
scipy: 0.19.1
xarray: None
IPython: 6.1.0
sphinx: 1.6.3
patsy: 0.4.1
dateutil: 2.6.1
pytz: 2017.2
blosc: None
bottleneck: 1.2.1
tables: 3.4.2
numexpr: 2.6.2 …
Run Code Online (Sandbox Code Playgroud)

python correlation pandas

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