我有熊猫数据框:
df = pd.DataFrame()
df['city'] = ['NY','NY','LA','LA']
df['hour'] = ['0','12','0','12']
df['value'] = [12,24,3,9]
city hour value
0 NY 0 12
1 NY 12 24
2 LA 0 3
3 LA 12 9
Run Code Online (Sandbox Code Playgroud)
我想,对于每个城市,将每一行除以前一行并将结果写入一个新的数据帧。所需的输出是:
city ratio
NY 2
LA 3
Run Code Online (Sandbox Code Playgroud)
什么是最pythonic的方式来做到这一点?
我试图在Jupyter Notebook上复制这个绘图教程,其数据集与示例中给出的数据集相匹配,我只需要更改一列的名称.这里的问题是离线命令
py.icreate_animations(figure)
Run Code Online (Sandbox Code Playgroud)
在离线笔记本模式下成为
icreate_animations(figure)
Run Code Online (Sandbox Code Playgroud)
不被承认.此外,如果我只是尝试用于静态图的iplot(figure)命令,则会引发一个很长的错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-27-b81a66612f63> in <module>()
38 figure['layout']['sliders'] = [sliders_dict]
39
---> 40 iplot(figure)
//anaconda/lib/python2.7/site-packages/plotly/offline/offline.pyc in iplot(figure_or_data, show_link, link_text, validate, image, filename, image_width, image_height, config)
330 config.setdefault('linkText', link_text)
331
--> 332 figure = tools.return_figure_from_figure_or_data(figure_or_data, validate)
333
334 # Though it can add quite a bit to the display-bundle size, we include
//anaconda/lib/python2.7/site-packages/plotly/tools.pyc in return_figure_from_figure_or_data(figure_or_data, validate_figure)
1383
1384 try:
-> 1385 graph_objs.Figure(figure)
1386 except exceptions.PlotlyError as err:
1387 raise …Run Code Online (Sandbox Code Playgroud) 我有一个巨大的熊猫数据框,形状像这个例子:
new_id hour names values
0 0 mark 5
0 0 matt 4
0 0 alex 3
1 0 roger 2
1 0 arthur 7
1 1 alf 8
2 1 ale 6
3 1 peter 5
3 2 tom 2
4 2 andrew 7
Run Code Online (Sandbox Code Playgroud)
我需要重塑它,所以我使用pivot_table():
dummy=dummy.pivot_table(index=['hour','new_id'],columns='name', values='values').fillna(0)
Run Code Online (Sandbox Code Playgroud)
所以它变成
names ale alex alf andrew arthur mark matt peter roger tom
hour new_id
0 0 0.0 3.0 0.0 0.0 0.0 5.0 4.0 0.0 0.0 0.0
1 0.0 0.0 0.0 …Run Code Online (Sandbox Code Playgroud) 我仔细阅读了文档,但我仍然不清楚如何使用 G.forEdges(),它被描述为“实验边缘迭代器接口”。
假设我想降低图形的密度。我有一个排序的权重列表,我想根据它们的权重删除边,直到图分成两个连接的组件。然后我将选择保持图形连接的最少链接数。我会做这样的事情:
cc = components.ConnectedComponents(G).run()
while cc.numberOfComponents()==1:
for weight in weightlist:
for (u,v) in G.edges():
if G.weight(u,v)==weight:
G=G.removeEdge(u,v)
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我从文档中知道有这个边缘迭代器,它可能以更有效的方式进行迭代。但是从文档中我真的无法理解如何正确使用 this forEdges,并且我无法在互联网上找到一个示例。有任何想法吗?
或者也许是做我想做的事情的另一种想法:因为它是一个巨大的图(1.25 亿个链接),即使我在一个集群上工作,迭代也将永远持续下去。
我有一个熊猫数据框,如下所示:
import pandas as pd
df=pd.DataFrame(data=np.random.rand(10,5),columns=['blue','white','red','green','purple'])
df['group_labels']=['a','a','b','c','b','c','a','c','b','b']
Run Code Online (Sandbox Code Playgroud)
我想按“group_labels”分组,计算平均值,然后显示在新的数据框中(平均值 +- 平均值的标准偏差)。所以基本上我想要:
mean_df=df.groupby('group_labels').mean().reset_index()
Run Code Online (Sandbox Code Playgroud)
但是,在每个单元格中,我还需要显示
+- std deviation of the group / sqrt(size of the group)
Run Code Online (Sandbox Code Playgroud)
那可能吗?
我正在城市地图上绘制某个分类值。我用来绘制的代码行如下:
fig = plt.figure(figsize=(12, 12))
ax = plt.gca()
urban_data.plot(column="category", cmap="viridis", ax=ax, categorical=True, /
k=4, legend=True, linewidth=0.5, /
legend_kwds={'fontsize':'19', 'loc':'lower left'})
Run Code Online (Sandbox Code Playgroud)
其中城市数据是 geopandas 数据框,我使用 matplotlib 作为绘图库。该参数legend_kwds允许我控制图例上的次要事物,例如位置或字体大小,但我无法决定主要事物,例如图例框中条目的顺序。事实上,我的类别是按 1-2-3-4 排列的,但我总是以不同的顺序显示它们。
是否可以对图例有更多的控制权?例如在函数外部gdf.plot()调用它?而且,如果是这样,我如何将图例中的颜色与地图中的颜色相匹配,这些颜色是 viridis 颜色图的离散值(我不确切知道)?
编辑:这是一个可验证的示例。不幸的是,shapefiles需要其他文件才能工作,这里geometry需要一个(区域,而不是点)列,所以我不得不要求你下载这个美国的shpfile 。您需要的一切都在这个文件夹中。这是重现该问题的代码。输出中的绘图很糟糕,因为我不关心这里的坐标系,但重要的是图例。
import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt
gdf=gpd.read_file('.../USA_adm1.shp')
clusters=np.random.randint(0,4, size=52)
gdf['cluster']=clusters
clusdict={1: 'lower-middle', 2: 'upper-middle', 3: 'upper', 0: 'lower'}
gdf['cluster']=gdf['cluster'].map(clusdict)
fig = plt.figure(figsize=(12, 12))
ax = plt.gca()
gdf.plot(column='cluster',cmap='viridis', categorical=True, legend=True, ax=ax)
Run Code Online (Sandbox Code Playgroud) 我不确定我是否理解 Networkit 如何处理节点的名称。
\n\n假设我使用另一个 Python 模块(如 Networkx)从边缘列表中读取一个大图;然后我将其转换为网络图并执行一些操作,例如计算成对距离。执行此操作的一段简单代码可以是:
\n\nimport networkx as nx\nimport networkit as nk\n\nnxG=nx.read_edgelist('test.edgelist',data=True)\n\nG = nk.nxadapter.nx2nk(nxG, weightAttr='weight')\n\napsp = nk.distance.APSP(G)\napsp.run()\ndist=apsp.getDistances()\nRun Code Online (Sandbox Code Playgroud)\n\n十分简单。
\n\n现在,如果我想对这些距离做一些事情该怎么办?例如,如果我想根据(我不知道\xe2\x80\x99)路径上的权重或任何其他需要检索原始节点 ID 的度量来绘制它们,该怎么办?
\n\n这getDistances()函数返回一个列表列表,每个节点都有一个列表,其中包含到每个其他节点的距离,但我不知道 Networkit 如何将节点 \xe2\x80\x99 名称映射到它用作节点标识符的整数序列,因此计算距离并将其存储在输出中所遵循的顺序。
我知道Python几乎是出于这些目的而制作的,但我真的很难理解我如何访问数据集中的特定值,并且我尝试使用pandas和csv模块.这可能是语法问题.事情就是这样:我有一个csv文件的形式
Nation, Year, No. of refugees
Afghanistan,2013,6657
Albania,2013,199
Algeria,2013,91
Angola,2013,47
Armenia,2013,156
...
...
Afghanistan,2012,6960
Albania,2012,157
Algeria,2012,67
Angola,2012,43
Armenia,2012,143
...
Run Code Online (Sandbox Code Playgroud)
等等.我想做的是每年获得难民总数,即选择某一年的所有行,并总结相关"难民难民"专栏中的所有要素.我成功地做到了这一点:
import csv
with open('refugees.csv', 'r') as f:
d_reader = csv.DictReader(f)
headers = d_reader.fieldnames
print headers
#2013
list2013=[]
for line in d_reader:
if (line['Year']=='2013'):
list2013.append(line['Refugees'])
list2013=map(int,list2013) #I have str values in my file
ref13=sum(list2013)
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一个更优雅(最重要的是,迭代)的解决方案.此外,如果我在不同年份多次执行该程序,我总是得到0:它仅适用于2013年,不确定原因.
编辑:我也试过这个,没有成功,但我认为这可能是完全错误的:
import csv
refugees_dict={}
a=range(2005,2014)
a=map(str, a)
with open('refugees.csv', 'r') as f:
d_reader = csv.DictReader(f)
for element in a:
for line in d_reader:
if (line['Year']==element):
print …Run Code Online (Sandbox Code Playgroud) python ×8
pandas ×4
networkit ×2
choropleth ×1
csv ×1
dataframe ×1
geopandas ×1
graph ×1
legend ×1
matplotlib ×1
networkx ×1
pivot-table ×1
plotly ×1
python-2.7 ×1
sum ×1