小编wil*_*llk的帖子

Pandas中位数的奇怪行为

考虑以下数据帧:

       b           c     d     e  f     g     h
0   6.25  2018-04-01  True   NaN  7  54.0  64.0
1  32.50  2018-04-01  True   NaN  7  54.0  64.0
2  16.75  2018-04-01  True   NaN  7  54.0  64.0
3  29.25  2018-04-01  True   NaN  7  54.0  64.0
4  21.75  2018-04-01  True   NaN  7  54.0  64.0
5  21.75  2018-04-01  True  True  7  54.0  64.0
6   7.75  2018-04-01  True  True  7  54.0  64.0
7  23.25  2018-04-01  True  True  7  54.0  64.0
8  12.25  2018-04-01  True  True  7  54.0  64.0 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

使用列方法向pandas DataFrame添加一行

我有一个pandas DataFrame,包含一些随时间推移的传感器读数,如下所示:

       diode1  diode2  diode3  diode4
Time
0.530       7       0      10      16
1.218      17       7      14      19
1.895      13       8      16      17
2.570       8       2      16      17
3.240      14       8      17      19
3.910      13       6      17      18
4.594      13       5      16      19
5.265       9       0      12      16
5.948      12       3      16      17
6.632      10       2      15      17
Run Code Online (Sandbox Code Playgroud)

我编写了代码,用每列的方法添加另一行:

# List of the averages for the test. 
averages = [df[key].describe()['mean'] for key in df]
indexes = df.index.tolist()
indexes.append('mean')
df.reindex(indexes)
# Adding …
Run Code Online (Sandbox Code Playgroud)

python mean dataframe pandas

13
推荐指数
1
解决办法
9689
查看次数

Pandas groupby和pct改变不返回预期值

对于Name以下数据框中的每一个,我试图找到从列Time到下一Amount列的百分比变化:

在此输入图像描述

用于创建数据帧的代码:

import pandas as pd

df = pd.DataFrame({'Name': ['Ali', 'Ali', 'Ali', 'Cala', 'Cala', 'Cala', 'Elena', 'Elena', 'Elena'],
                   'Time': [1, 2, 3, 1, 2, 3, 1, 2, 3],
                   'Amount': [24, 52, 34, 95, 98, 54, 32, 20, 16]})

df.sort_values(['Name', 'Time'], inplace = True)
Run Code Online (Sandbox Code Playgroud)

我尝试的第一种方法(基于这个问题和答案)使用groupbypct_change:

df['pct_change'] = df.groupby(['Name'])['Amount'].pct_change()
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述

这似乎不是按名称分组,因为它与我使用no groupby和被调用的结果相同df['Amount'].pct_change().按照熊猫文档进行pandas.core.groupby.DataFrameGroupBy.pct_change,上述办法应努力来计算一组中的前值的每个值的百分比变化.

对于第二种方法我用groupbyapplypct_change:

df['pct_change_with_apply'] = df.groupby('Name')['Amount'].apply(lambda x: …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

13
推荐指数
1
解决办法
1184
查看次数

在gganimate循环之间暂停

是否可以在gganimate循环之间添加暂停?我知道我们可以设置帧之间的间隔interval,但有没有办法在循环回到第一帧之前暂停最后一帧?

是将最终帧的多个副本插入数据的最佳方法吗?

visualization r ggplot2 gganimate

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

在Pandas中合并索引上的数据帧更有效

为什么在Pandas上合并数据帧的索引比在列上更有效(更快)?

import pandas as pd

# Dataframes share the ID column
df = pd.DataFrame({'ID': [0, 1, 2, 3, 4],
                   'Job': ['teacher', 'scientist', 'manager', 'teacher', 'nurse']})

df2 = pd.DataFrame({'ID': [2, 3, 4, 5, 6, 7, 8],
                    'Level': [12, 15, 14, 20, 21, 11, 15], 
                    'Age': [33, 41, 42, 50, 45, 28, 32]})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

df = df.set_index('ID')
df2 = df2.set_index('ID')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这代表了大约3.5倍的加速!(使用Pandas 0.23.0)

通过Pandas内部页面阅读它会说索引"在Cython中填充标签的位置以进行O(1)查找." 这是否意味着使用索引进行操作比使用列更有效?始终将索引用于合并等操作是最佳做法吗?

我阅读了加入和合并文档,并没有明确提到使用索引的任何好处.

python merge dataframe pandas

12
推荐指数
1
解决办法
1843
查看次数

大写在Python集合模块中的重要性?

collectionsPython模块中的类的大写形式是否有意义?特别是,我发现OrderedDict使用CamelCase 令人困惑,而CamelCase defaultdict都是小写字母。我的假设是它们都将使用CamelCase,因为它们都是类。

在此处输入图片说明

python naming-conventions python-collections

11
推荐指数
1
解决办法
139
查看次数

熊猫插值“时间”与“线性”

Pandasinterpolate函数中method='time'相当于method='linear'当时间索引等距时?

一个基本的例子表明情况就是这样:

even_index = pd.date_range('2019-02-20 10:00 am', 
                           '2019-02-20 2:00 pm', freq='1 h')
values = [10, np.nan, 30, np.nan, 50]

pd.DataFrame(values, index=even_index).interpolate(method='time')

                        0
2019-02-20 10:00:00  10.0
2019-02-20 11:00:00  20.0
2019-02-20 12:00:00  30.0
2019-02-20 13:00:00  40.0
2019-02-20 14:00:00  50.0


pd.DataFrame(values, index=even_index).interpolate(method='linear')

                        0
2019-02-20 10:00:00  10.0
2019-02-20 11:00:00  20.0
2019-02-20 12:00:00  30.0
2019-02-20 13:00:00  40.0
2019-02-20 14:00:00  50.0
Run Code Online (Sandbox Code Playgroud)

'time' 和 'linear' 之间的差异似乎只有在时间索引不等距时才会出现:

uneven_index = pd.to_datetime(['2019-02-20 10:00 am', 
               '2019-02-20 10:30 am', '2019-02-20 12:30 pm', 
               '2019-02-20 1:30 …
Run Code Online (Sandbox Code Playgroud)

python interpolation dataframe pandas

8
推荐指数
1
解决办法
4811
查看次数

Numpy inconsistent results with Pandas and missing values

Why does numpy return different results with missing values when using a Pandas series compared to accessing the series' values as in the following:

import pandas as pd
import numpy as np

data = pd.DataFrame(dict(a=[1, 2, 3, np.nan, np.nan, 6]))
np.sum(data['a'])

#12.0

np.sum(data['a'].values)
#nan
Run Code Online (Sandbox Code Playgroud)

python numpy missing-data pandas

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

熊猫日期时间周不像预期的那样

使用 Pandas 日期时间时,我试图按周和年对数据进行分组。但是,我注意到有些年份一年的最后一天与同年的第一周归为一组。

import pandas as pd
day_df = pd.DataFrame(index=pd.date_range('2016-01-01', '2020-12-31'))

for (week, year), subset in day_df.groupby([day_df.index.week, day_df.index.year]):
     if week == 1:
         print('Week:', subset.index.min(), subset.index.max())

Week: 1 2016-01-04 00:00:00 2016-01-10 00:00:00
Week: 1 2017-01-02 00:00:00 2017-01-08 00:00:00
Week: 1 2018-01-01 00:00:00 2018-12-31 00:00:00
Week: 1 2019-01-01 00:00:00 2019-12-31 00:00:00
Week: 1 2020-01-01 00:00:00 2020-01-05 00:00:00
Run Code Online (Sandbox Code Playgroud)

对于 2018 和 2019 年,一年的第一天与一年的最后一天归为一组!这种行为是预期的吗?为什么一年的最后一天是第 1 周?

我已经用基本if语句得到了我想要的结果,但这种week行为似乎可能会导致问题,因为它是出乎意料的。

这符合我对分组的意图:

for (week, year), subset in day_df.groupby([day_df.index.week, day_df.index.year]):
    # Prevent first week of …
Run Code Online (Sandbox Code Playgroud)

python datetime pandas pandas-groupby

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

什么决定了 Pandas 的最小和最大时间戳?

Pandas 中的最小值Timestamp是:

pd.Timestamp.min
Timestamp('1677-09-21 00:12:43.145225')
Run Code Online (Sandbox Code Playgroud)

最大值为:

pd.Timestamp.max
Timestamp('2262-04-11 23:47:16.854775807')
Run Code Online (Sandbox Code Playgroud)

这意味着您无法将超出此范围的值转换为 Pandas 日期时间:

pd.Timestamp(datetime.date(2500, 1, 1))
OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 2500-01-01 00:00:00
Run Code Online (Sandbox Code Playgroud)

是什么决定了这些限制?

python datetime pandas

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