给出一个数据帧字典,如:
dict = {'ABC': df1, 'XYZ' : df2} # of any length...
Run Code Online (Sandbox Code Playgroud)
其中每个数据框具有相同的列和相似的索引,例如:
data Open High Low Close Volume
Date
2002-01-17 0.18077 0.18800 0.16993 0.18439 1720833
2002-01-18 0.18439 0.21331 0.18077 0.19523 2027866
2002-01-21 0.19523 0.20970 0.19162 0.20608 771149
Run Code Online (Sandbox Code Playgroud)
将所有数据帧合并为一个的最简单方法是什么,使用多索引,如:
symbol ABC XYZ
data Open High Low Close Volume Open ...
Date
2002-01-17 0.18077 0.18800 0.16993 0.18439 1720833 ...
2002-01-18 0.18439 0.21331 0.18077 0.19523 2027866 ...
2002-01-21 0.19523 0.20970 0.19162 0.20608 771149 ...
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些方法 - 例如,对于每个数据帧,用多索引替换列.from_product(['ABC', columns])然后连接axis=1,但没有成功.
我想在熊猫上运行一个轴DataFrame,索引是两列,而不是一列.例如,年份的一个字段,月份的一个字段,显示"项目1"和"项目2"的"项目"字段和带有数值的"值"字段.我希望索引是年+月.
我设法让这个工作的唯一方法是将两个字段合并为一个,然后再将它们分开.有没有更好的办法?
下面复制的最小代码.非常感谢!
PS是的,我知道关键字'pivot'和'multi-index'还有其他问题,但我不明白他们是否/如何帮助我解决这个问题.
import pandas as pd
import numpy as np
df= pd.DataFrame()
month = np.arange(1, 13)
values1 = np.random.randint(0, 100, 12)
values2 = np.random.randint(200, 300, 12)
df['month'] = np.hstack((month, month))
df['year'] = 2004
df['value'] = np.hstack((values1, values2))
df['item'] = np.hstack((np.repeat('item 1', 12), np.repeat('item 2', 12)))
# This doesn't work:
# ValueError: Wrong number of items passed 24, placement implies 2
# mypiv = df.pivot(['year', 'month'], 'item', 'value')
# This doesn't work, either:
# df.set_index(['year', 'month'], inplace=True) …Run Code Online (Sandbox Code Playgroud) 假设我有一个如下所示的字典:
dictionary = {'A' : {'a': [1,2,3,4,5],
'b': [6,7,8,9,1]},
'B' : {'a': [2,3,4,5,6],
'b': [7,8,9,1,2]}}
Run Code Online (Sandbox Code Playgroud)
我想要一个看起来像这样的数据帧:
A B
a b a b
0 1 6 2 7
1 2 7 3 8
2 3 8 4 9
3 4 9 5 1
4 5 1 6 2
Run Code Online (Sandbox Code Playgroud)
有没有方便的方法来做到这一点?如果我尝试:
In [99]:
DataFrame(dictionary)
Out[99]:
A B
a [1, 2, 3, 4, 5] [2, 3, 4, 5, 6]
b [6, 7, 8, 9, 1] [7, 8, 9, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我得到一个数据框,其中每个元素都是一个列表.我需要的是一个多索引,其中每个级别对应于嵌套字典中的键和对应于列表中每个元素的行,如上所示.我想我可以做一个非常粗糙的解决方案,但我希望可能会有一些更简单的东西.
所以我了解到我可以使用DataFrame.groupby而无需使用MultiIndex进行子采样/横截面.
另一方面,当我在DataFrame上有MultiIndex时,我仍然需要使用DataFrame.groupby来进行子采样/横截面.
那么除了在打印时非常有用且漂亮的层次结构显示之外,什么是MultiIndex?
我怀疑这是微不足道的,但我还没有发现让我根据分层键的值从Pandas数据帧中选择行的咒语.因此,例如,假设我们有以下数据帧:
import pandas
df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'],
'group2': ['c','c','d','d','d','e'],
'value1': [1.1,2,3,4,5,6],
'value2': [7.1,8,9,10,11,12]
})
df = df.set_index(['group1', 'group2'])
Run Code Online (Sandbox Code Playgroud)
看起来像我们期望的那样:

如果df未在group1上编入索引,我可以执行以下操作:
df['group1' == 'a']
Run Code Online (Sandbox Code Playgroud)
但是这个带有索引的数据帧失败了.所以也许我应该把它想象成一个带有分层索引的Pandas系列:
df['a','c']
Run Code Online (Sandbox Code Playgroud)
不.那也失败了.
那么如何选择所有行:
我有以下pandas数据帧:
dfalph.head()
token year uses books
386 xanthos 1830 3 3
387 xanthos 1840 1 1
388 xanthos 1840 2 2
389 xanthos 1868 2 2
390 xanthos 1875 1 1
Run Code Online (Sandbox Code Playgroud)
我使用重复令牌聚合行,并且如下所示:
dfalph = dfalph[['token','year','uses','books']].groupby(['token', 'year']).agg([np.sum])
dfalph.columns = dfalph.columns.droplevel(1)
dfalph.head()
uses books
token year
xanthos 1830 3 3
1840 3 3
1867 2 2
1868 2 2
1875 1 1
Run Code Online (Sandbox Code Playgroud)
我没有在索引中使用'token'和'year'字段,而是希望将它们返回到列并具有整数索引.
我的数据带有UTC时间戳.我想将此时间戳的时区转换为"US/Pacific",并将其作为分层索引添加到pandas DataFrame中.我已经能够将时间戳转换为索引,但是当我尝试将其添加回DataFrame时,它会丢失时区格式,无论是作为列还是作为索引.
>>> import pandas as pd
>>> dat = pd.DataFrame({'label':['a', 'a', 'a', 'b', 'b', 'b'], 'datetime':['2011-07-19 07:00:00', '2011-07-19 08:00:00', '2011-07-19 09:00:00', '2011-07-19 07:00:00', '2011-07-19 08:00:00', '2011-07-19 09:00:00'], 'value':range(6)})
>>> dat.dtypes
#datetime object
#label object
#value int64
#dtype: object
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试直接转换系列,我会遇到错误.
>>> times = pd.to_datetime(dat['datetime'])
>>> times.tz_localize('UTC')
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "/Users/erikshilts/workspace/schedule-detection/python/pysched/env/lib/python2.7/site-packages/pandas/core/series.py", line 3170, in tz_localize
# raise Exception('Cannot tz-localize non-time series')
#Exception: Cannot tz-localize non-time series
Run Code Online (Sandbox Code Playgroud)
如果我将其转换为索引,那么我可以将其作为时间序列进行操作.请注意,索引现在具有太平洋时区.
>>> times_index = …Run Code Online (Sandbox Code Playgroud) 有谁知道是否可以使用DataFrame.loc方法从MultiIndex中进行选择?我有以下的数据帧,并希望能够访问位于"暂停"列中的值,在指数('at', 1),('at', 3),('at', 5),等(非连续).
我希望能够做data.loc[['at',[1,3,5]], 'Dwell']类似于data.loc[[1,3,5], 'Dwell']常规索引(返回3个成员的Dwell值系列)的语法.
我的目的是选择数据的任意子集,仅对该子集执行一些分析,然后使用分析结果更新新值.我打算使用相同的语法为这些数据设置新值,因此链接选择器在这种情况下不会真正起作用.
这是我正在使用的DataFrame的一部分:
Char Dwell Flight ND_Offset Offset
QGram
at 0 a 100 120 0.000000 0
1 t 180 0 0.108363 5
2 a 100 120 0.000000 0
3 t 180 0 0.108363 5
4 a 20 180 0.000000 0
5 t 80 120 0.108363 5
6 a 20 180 0.000000 0
7 t 80 120 0.108363 5
8 a 20 180 0.000000 0 …Run Code Online (Sandbox Code Playgroud) 在python中使用Pandas包,我想在一个系列中使用3级多索引对一个级别进行求和(边缘化)以生成具有2级多索引的系列.例如,如果我有以下内容:
ind = [tuple(x) for x in ['ABC', 'ABc', 'AbC', 'Abc', 'aBC', 'aBc', 'abC', 'abc']]
mi = pd.MultiIndex.from_tuples(ind)
data = pd.Series([264, 13, 29, 8, 152, 7, 15, 1], index=mi)
A B C 264
c 13
b C 29
c 8
a B C 152
c 7
b C 15
c 1
Run Code Online (Sandbox Code Playgroud)
我想总结变量C以产生以下输出:
A B 277
b 37
a B 159
b 16
Run Code Online (Sandbox Code Playgroud)
熊猫做这件事的最佳方式是什么?
我有一个数据框,有多grouped索引列,如下所示:
import pandas as pd
codes = ["one","two","three"];
colours = ["black", "white"];
textures = ["soft", "hard"];
N= 100 # length of the dataframe
df = pd.DataFrame({ 'id' : range(1,N+1),
'weeks_elapsed' : [random.choice(range(1,25)) for i in range(1,N+1)],
'code' : [random.choice(codes) for i in range(1,N+1)],
'colour': [random.choice(colours) for i in range(1,N+1)],
'texture': [random.choice(textures) for i in range(1,N+1)],
'size': [random.randint(1,100) for i in range(1,N+1)],
'scaled_size': [random.randint(100,1000) for i in range(1,N+1)]
}, columns= ['id', 'weeks_elapsed', 'code','colour', 'texture', 'size', 'scaled_size'])
grouped = df.groupby(['code', …Run Code Online (Sandbox Code Playgroud) multi-index ×10
pandas ×10
python ×10
dataframe ×4
dictionary ×1
pivot ×1
statistics ×1
timezone ×1