小编BAC*_*C83的帖子

依靠 pandas 的滚动时间窗口

我正在尝试返回有关(移动)固定点的时间窗口的计数。

它试图根据之前的使用情况随时了解仪器的状况。

因此,如果仪器在中午 12.05、12.10、12.15、12.30、12.40 和下午 1 点使用,则使用计数将为:

12.05 -> 1(最后一小时一次)

12.10 -> 2

12.15 -> 3

12.30 -> 4

12.40 -> 5

1.00 -> 6

...但是假设使用在 1.06 恢复: 1.06 -> 6 这不会增加计数,因为第一次运行是一个多小时前。

如何计算此计数并将其附加为一列?

感觉这是一个在 lambda 函数中可能使用 timedelta 的 groupby/aggregate/count,但我不知道从哪里开始。

我也希望能够使用时间窗口,所以不仅仅是过去一小时,还有实例周围的一小时,即+和-30分钟。

以下代码给出了一个起始数据帧:

s = pd.Series(pd.date_range('2020-1-1', periods=8000, freq='250s'))
df = pd.DataFrame({'Run time': s})
df_sample = df.sample(6000)
df_sample = df_sample.sort_index()
Run Code Online (Sandbox Code Playgroud)

我发现的最好的帮助(公平地说,我通常可以从逻辑上拼凑在一起)是滚动时间窗口上的这种独特的计数,但这次我没有做到。

谢谢

python timedelta pandas pandas-groupby

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

通过索引删除多个Pandas列

我有一个大熊猫数据框(> 100列)。我需要删除各种列集,我希望有一种使用旧列的方法

df.drop(df.columns['slices'],axis=1)
Run Code Online (Sandbox Code Playgroud)

我建立了一些选择,例如:

a = df.columns[3:23]
b = df.colums[-6:]
Run Code Online (Sandbox Code Playgroud)

作为ab代表我要删除的列集。

下列

list(df)[3:23]+list(df)[-6:]
Run Code Online (Sandbox Code Playgroud)

产生正确的选择,但我不能用实现它drop

df.drop(df.columns[list(df)[3:23]+list(df)[-6:]],axis=1)
Run Code Online (Sandbox Code Playgroud)

ValueError:操作数不能与形状(20,)(6,)一起广播

我环顾四周,但找不到答案。

选择数据帧中的最后n列并排除最后n列

(以下与我收到的错误有关):

python numpy ValueError:操作数不能与形状一起广播

感觉好像他们遇到了类似的问题,但是“切片”并不是分开的: 根据Pandas中的列名删除多个列

干杯

python indexing numpy dataframe pandas

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

Pandas iloc复合切片每第n行

我有一个14行的周期数据帧,即每条记录有14行数据(均值,sdev等),我想为每条记录重复提取第2,第4,第7和第9行(14行) ).我的代码是:

Mean_df = df.iloc[[1,3,6,8]::14,:].copy()

这不起作用

TypeError: cannot do slice indexing on <class 'pandas.core.indexes.range.RangeIndex'> with these indexers [[1, 3, 6, 8]] of <class 'list'>

我从这里获得了代码的帮助,这对我来说非常有用,但不是多行选择 - Pandas每隔n行

我可以提取几个不同的切片并组合,但感觉可能有更优雅的解决方案.

有任何想法吗?

python indexing slice dataframe pandas

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

按日期对 pandas df 中的组进行排序和排名

从以下类型的数据框中,我希望能够id按日期对字段进行排序和排名:

df = pd.DataFrame({
'id':[1, 1, 2, 3, 3, 4, 5, 6,6,6,7,7], 
'value':[.01, .4, .2, .3, .11, .21, .4, .01, 3, .5, .8, .9],
'date':['10/01/2017 15:45:00','05/01/2017 15:56:00',
        '11/01/2017 15:22:00','06/01/2017 11:02:00','05/01/2017 09:37:00',
        '05/01/2017 09:55:00','05/01/2017 10:08:00','03/02/2017 08:55:00',
        '03/02/2017 09:15:00','03/02/2017 09:31:00','09/01/2017 15:42:00',
        '19/01/2017 16:34:00']})
Run Code Online (Sandbox Code Playgroud)

id根据日期有效排名或索引。

我用过

df.groupby('id')['date'].min()
Run Code Online (Sandbox Code Playgroud)

这允许我提取第一个日期(虽然我不知道如何使用它来过滤掉行),但我可能并不总是需要第一个日期 - 有时它会是第二个或第三个日期,所以我需要生成一个新的列,带有日期索引 - 结果将如下所示:

在此输入图像描述

关于这种排序/排名/标签有什么想法吗?

编辑

我最初的模型忽略了一个非常普遍的问题。

由于可能有一些id并行执行多个测试,因此它们显示在数据库中的多行中,并具有匹配的日期(date对应于它们的记录时间)。这些应该被算作相同的日期,而不是增加 date_rank:我已经生成了一个模型,并进行了更新date_rank以演示其外观:

df = pd.DataFrame({
'id':[1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6,6,6,7,7], 
'value':[.01, …
Run Code Online (Sandbox Code Playgroud)

python sorting group-by ranking pandas

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

将逗号后的最后一项提取到新列中

我有一个熊猫数据框,它本质上是 2 列和 9000 行

CompanyName  |  CompanyAddress
Run Code Online (Sandbox Code Playgroud)

地址是这样的

Line1, Line2, ..LineN, PostCode
Run Code Online (Sandbox Code Playgroud)

即字符串(或 dtype 'object')中以逗号分隔的项目的数量基本上不同,我只想提取邮政编码,即字段中最后一个逗号之后的项目

我已经尝试过点符号字符串操作建议(可能很糟糕):

df_address['CompanyAddress'] = df_address['CompanyAddress'].str.rsplit(', ') 
Run Code Online (Sandbox Code Playgroud)

只是在字段周围放置了 '[]' - 我没有成功尝试隔离任何拆分/分区字符串的最后一个组件,并maxsplit引发错误。

在 EdChums 对Pandas 用逗号将列拆分为多列的评论后,我取得了一定程度的成功

pd.concat([df_address[['CompanyName']], df_address['CompanyAddress'].str.rsplit(', ', expand=True)], axis=1)
Run Code Online (Sandbox Code Playgroud)

但是,在隔离邮政编码的同时,这只会创建多个列,而邮政编码位于第 3-6 列中……同样不好。

感觉非常接近,请指教。

    EmployerName    Address
0   FAUCET INN LIMITED  [Union, 88-90 George Street, London, W1U 8PA]
1   CITIBANK N.A    [Citigroup Centre,, Canary Wharf, Canada Squar...
2   AGENCY 2000 LIMITED     [Sovereign House, 15 Towcester Road, Old Strat...
3   Transform Trust …
Run Code Online (Sandbox Code Playgroud)

python string split pandas

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

Seaborn boxplot 水平线注释

我想在一些图中添加一条水平线,即“目标”线:带状图、箱线图和小提琴图,以显示理想值数据(或理想情况下的范围)。

这个 R 示例(在箱线图中添加多条水平线) - 第一张图像 - 基本上就是它(尽管我会做一些格式化以使其易于展示)。

Python中的R abline() 等价物对我没有帮助(或者我还没有弄清楚如何),因为我正在使用分类数据,所以我只想基本上定义(例如)y=3并绘制它。我的代码(如下)工作正常,我只是不知道如何添加一行。

fig, ax = plt.subplots(nrows=4,figsize=(20,20))

sns.violinplot(x="Wafer", y="Means", hue='Feature', 
           data=Means[Means.Target == 1], ax=ax[0])
sns.violinplot(x="Wafer", y="Means", hue='Feature', 
           data=Means[Means.Target == 3], ax=ax[1])
sns.boxplot(x="Feature", y="Means", 
        data=Means, linewidth=0.8, ax=ax[2])
sns.stripplot(x="Feature", y="Means", hue='Wafer',
          data=Means, palette="plasma", jitter=0.1, size=5.5, ax=ax[3])
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助。

python boxplot pandas seaborn

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

使用字典过滤 pandas 数据框的列值

前提

我需要使用字典作为大型数据帧的过滤器,其中键值对是不同列中的值。该字典是从单独的数据帧获取的,dict(zip(df.id_col, df.rank_col))因此如果字典不是最好的方法,则可以进行更改。

这与这个问题非常相似:使用字典中的值过滤熊猫数据框,但从根本上(我认为)不同,因为我的字典包含列配对值:

示例数据

df_x = pd.DataFrame({'id':[1,1,1,2,2,2,3,3,3], 
'B':[1,1,1,0,1,0,1,0,1], 'Rank':['1','2','3','1', '2','3','1','2','3'],'D':[1,2,3,4,5,6,7,8,9]})
filter_dict = {'1':'1', '2':'3', '3':'2'}
Run Code Online (Sandbox Code Playgroud)

对于这个数据框,df_x我希望能够查看过滤器字典并将其应用于一组列,此处idRank,因此数据框被削减为:

在此输入图像描述

实际的源数据帧大约有 1M 行,字典有 >100 个键值对。谢谢你的帮助。

python dictionary filter pandas

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