考虑以下数据帧:
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) 我有一个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) 对于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)
我尝试的第一种方法(基于这个问题和答案)使用groupby和pct_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,上述办法应努力来计算一组中的前值的每个值的百分比变化.
对于第二种方法我用groupby用apply和pct_change:
df['pct_change_with_apply'] = df.groupby('Name')['Amount'].apply(lambda x: …Run Code Online (Sandbox Code Playgroud) 是否可以在gganimate循环之间添加暂停?我知道我们可以设置帧之间的间隔interval,但有没有办法在循环回到第一帧之前暂停最后一帧?
是将最终帧的多个副本插入数据的最佳方法吗?
为什么在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)查找." 这是否意味着使用索引进行操作比使用列更有效?始终将索引用于合并等操作是最佳做法吗?
collectionsPython模块中的类的大写形式是否有意义?特别是,我发现OrderedDict使用CamelCase 令人困惑,而CamelCase defaultdict都是小写字母。我的假设是它们都将使用CamelCase,因为它们都是类。
在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) 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) 使用 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) 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)
是什么决定了这些限制?