愚蠢的问题,但我真的找不到答案.我有一个包含此索引的数据框:
index = pd.MultiIndex.from_product([['stock1','stock2'...],['price','volume'...]])
Run Code Online (Sandbox Code Playgroud)
这是一个有用的结构df['stock1']
,但我如何选择所有价格数据?我无法理解文档.
我试过以下没有运气: df[:,'price']
df[:]['price']
df.loc(axis=1)[:,'close']
df['price]
如果无论出于何种原因,这种索引风格一般都被认为是一个坏主意,那么什么是更好的选择呢?我应该将股票的多指数指数作为时间序列上的标签而不是列级别吗?
非常感谢
编辑 - 我使用multiindex作为列,而不是索引(措辞对我来说更好).文档中的示例侧重于多级索引而不是列结构.
我想按一年选择行:
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['Start','End'],data=[[np.datetime64('2001-01-01'),np.datetime64('2001-07-01')],[np.datetime64('2002-01-01'),np.datetime64('2002-11-01')]])
print(df)
Start End
0 2001-01-01 2001-07-01
1 2002-01-01 2002-11-01
Run Code Online (Sandbox Code Playgroud)
所以我尝试:
df_2001 = df.loc[df['Start'.year == 2001)]]
Traceback (most recent call last):
Python Shell, prompt 16, line 1
invalid syntax: <string>, line 1, pos 30
Run Code Online (Sandbox Code Playgroud)
如何在 datetime64 列中按年份进行选择?
我有很多像这样的子图:
import networkx as nx
G = nx.DiGraph()
G.add_edges_from([(2,1),(3,1),(1,4)])
nx.draw(G)
Run Code Online (Sandbox Code Playgroud)
我想找到所有的起始节点和结束节点。所以我用:
startnodes = [x for x in G.nodes() if G.out_degree(x)==1 and G.in_degree(x)==0]
endnode = [x for x in G.nodes() if G.out_degree(x)==0 and G.in_degree(x)==1][0]
print(startnodes, endnode)
[2, 3] 4
Run Code Online (Sandbox Code Playgroud)
但有些子图如下所示,末端节点的度数为 2。我怎样才能找到它的结束节点?
G.add_edges_from([(2,1),(3,1)]
Run Code Online (Sandbox Code Playgroud)
我有一个数据框:
import pandas as pd
import numpy as np
df=pd.DataFrame.from_items([('STAND_ID',[1,1,2,3,3,3]),('Species',['Conifer','Broadleaves','Conifer','Broadleaves','Conifer','Conifer']),
('Height',[20,19,13,24,25,18]),('Stems',[1500,2000,1000,1200,1700,1000]),('Volume',[200,100,300,50,100,10])])
STAND_ID Species Height Stems Volume
0 1 Conifer 20 1500 200
1 1 Broadleaves 19 2000 100
2 2 Conifer 13 1000 300
3 3 Broadleaves 24 1200 50
4 3 Conifer 25 1700 100
5 3 Conifer 18 1000 10
Run Code Online (Sandbox Code Playgroud)
我想按 STAND_ID 和 Species 分组,对 Height 和 Stems 应用加权平均值,以体积为重量并拆开。
所以我尝试:
newdf=df.groupby(['STAND_ID','Species']).agg({'Height':lambda x: np.average(x['Height'],weights=x['Volume']),
'Stems':lambda x: np.average(x['Stems'],weights=x['Volume'])}).unstack()
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
内置键错误:'高度'
我怎样才能解决这个问题?
我有多个日期时间对象,例如:
>>a
datetime.datetime(2009, 11, 1, 0, 0)
Run Code Online (Sandbox Code Playgroud)
我想保持日期不变并将时间更改为零(时间上的三位数字):
>>b
datetime.datetime(2009, 11, 1, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)
可能很简单,但我想不通
编辑: 出于某种原因,秒为零不起作用。没关系,它适用于 1:
>>a
datetime.datetime(2009, 11, 1, 0, 0)
>>b = datetime.datetime.combine(a.date(), datetime.time(0,0,0))
>>b
datetime.datetime(2009, 11, 1, 0, 0)
>>b = datetime.datetime.combine(a.date(), datetime.time(0,0,1))
>>b
datetime.datetime(2009, 11, 1, 0, 0, 1)
Run Code Online (Sandbox Code Playgroud) 我有一个名为的数据框dfimp
:
>>dfimp
Column1 Column2
vo_11
102 0.023002 0
301 3571.662104 0
302 1346.910261 0
...
Run Code Online (Sandbox Code Playgroud)
在我的noob意见中它的三列?但:
>>dfimp.dtypes
Column1 float64
Column2 float64
dtype: object
Run Code Online (Sandbox Code Playgroud)
那么它的两列呢?什么是第一个(vo_11
)被称为?我想用它来进行合并但是当我这样做时我得到错误,说没有列名vo_11
.
我想将 'E100N05' 拆分为 ['E100', 'N05'] ,因此在数字变成字母 N、E、S 或 W 后进行拆分。字母后面的位数可以不同。
import re
re.split('[NSEW$*]', 'E100N05')
Out[8]: ['', '100', '05']
What I want : ['E100','N05']
Run Code Online (Sandbox Code Playgroud)
我应该使用哪种模式?
我有一个元组列表:
Listoftuples=[
(0.021892733407683305, 0.14887058717224647, 4.573173081530965, 0.04619366749021177, u'0102'),
(0.08416364174734663, 0.8500527816482009, 23.649983331004403, 0.0, u'0103'),
(0.02181070623592521, 0.15049387302788395, 1.2098398749067714, 1.6037412295275804, u'0102')
]
Run Code Online (Sandbox Code Playgroud)
我想每组(group =元组中的最后一个值,例如u'0102'):
尝试:
import itertools
Listoftuples=[
(0.021892733407683305, 0.14887058717224647, 4.573173081530965, 0.04619366749021177, u'0102'),
(0.08416364174734663, 0.8500527816482009, 23.649983331004403, 0.0, u'0103'),
(0.02181070623592521, 0.15049387302788395, 1.2098398749067714, 1.6037412295275804, u'0102')
]
keyfunc=lambda t: (t[4])
Listoftuples.sort(key=keyfunc)
for key,rows in itertools.groupby(Listoftuples, keyfunc):
sumOfFirstValue = sum(r[0] for r in rows)
sumOfSecondDividedBySumOfFirst= sum(r[1] for r in rows)/sumOfFirstValue
print key,sumOfFirstValue,sumOfSecondDividedBySumOfFirst
Run Code Online (Sandbox Code Playgroud)
结果:
0102 0.0437034396436 0.0
0103 0.0841636417473 0.0
Run Code Online (Sandbox Code Playgroud)
最后的零值.我该如何解决?
我有一个包含林分编号,树木种类,高度和体积的数据框:
import pandas as pd
df=pd.DataFrame.from_items([('STAND_ID',[1,1,2,3,3,3]),('Species',['Conifer','Broadleaves','Conifer','Broadleaves','Conifer','Conifer']),
('Height',[20,19,13,24,25,18]),('Volume',[200,100,300,50,100,10])])
STAND_ID Species Height Volume
0 1 Conifer 20 200
1 1 Broadleaves 19 100
2 2 Conifer 13 300
3 3 Broadleaves 24 50
4 3 Conifer 25 100
5 3 Conifer 18 10
Run Code Online (Sandbox Code Playgroud)
我想按展位ID分组和取消堆叠并计算体积加权平均高度,所以我尝试:
newdf=df.groupby(['STAND_ID','Species']).mean().unstack()
Height Volume
Species Broadleaves Conifer Broadleaves Conifer
STAND_ID
1 19.0 20.0 100.0 200.0
2 NaN 13.0 NaN 300.0
3 24.0 21.5 50.0 55.0
Run Code Online (Sandbox Code Playgroud)
高度当然不是体积加权平均值。我该如何称量它们的重量?对于STAND_ID 3和针叶树,如下所示:
(25 * 100 + 18 * 10)/(100 + 10)= 24.4
我确信这是重复的,但我找不到它。
我有这个数据框:
import pandas as pd
df = pd.DataFrame(data=[['Sweden','A',5],
['Sweden','A',10],
['Norway','B',4],
['Norway','C',5]],
columns=['Country','Class','Value'])
print(df)
Country Class Value
0 Sweden A 5
1 Sweden A 10
2 Norway B 4
3 Norway C 5
Run Code Online (Sandbox Code Playgroud)
我想按国家和类别分组并找到它们的总和,所以我尝试:
df.groupby(['Country','Class']).sum()
Value
Country Class
Norway B 4
C 5
Sweden A 15
Run Code Online (Sandbox Code Playgroud)
但我希望包含每个国家/地区的所有可能的课程,如下所示
Value
Country Class
Norway B 4
C 5
A na
Sweden A 15
B na
C na
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?