给出以下数据框:
import pandas as pd
import numpy as np
df=pd.DataFrame({'A':['A','A','A','B','B','B'],
'B':['a','a','b','a','a','a'],
})
df
A B
0 A a
1 A a
2 A b
3 B a
4 B a
5 B a
Run Code Online (Sandbox Code Playgroud)
我想创建列'C',它在A和B列中对每组内的行进行编号,如下所示:
A B C
0 A a 1
1 A a 2
2 A b 1
3 B a 1
4 B a 2
5 B a 3
Run Code Online (Sandbox Code Playgroud)
到目前为止我试过这个:
df['C']=df.groupby(['A','B'])['B'].transform('rank')
Run Code Online (Sandbox Code Playgroud)
......但没有骰子!提前致谢!
鉴于以下热图,我将如何删除轴标题('月'和'年')?
import seaborn as sns
# Load the example flights dataset and conver to long-form
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")
# Draw a heatmap with the numeric values in each cell
sns.heatmap(flights, annot=True, fmt="d", linewidths=.5)
Run Code Online (Sandbox Code Playgroud)
鉴于此处提供的形状文件:我想在地图中标记每个多边形(县).这可能与GeoPandas有关吗?
import geopandas as gpd
import matplotlib.pyplot as plt
%matplotlib inline
shpfile=<Path to unzipped .shp file referenced and linked above>
c=gpd.read_file(shpfile)
c=c.loc[c['GEOID'].isin(['26161','26093','26049','26091','26075','26125','26163','26099','26115','26065'])]
c.plot()
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我无法找到有关seaborn热图的任何关键词的任何文件annot_kws
或cbar_kws
.
有一个秘密的地方我可以找到这样的东西吗?
鉴于以下列表
a = [0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列表b
,其中包含对当前值和下一个值a
求和的元素.它将包含少于1的元素a
.
像这样:
b = [1, 3, 5]
Run Code Online (Sandbox Code Playgroud)
(从0 + 1,1 + 2和2 + 3)
这是我尝试过的:
b = []
for i in a:
b.append(a[i + 1] - a[i])
b
Run Code Online (Sandbox Code Playgroud)
问题是我一直收到这个错误:
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)
我很确定它会发生,因为当我得到(3)的最后一个元素时,我无法将它添加到任何东西,因为这样做超出了它的值(3之后没有值添加).因此,我需要告诉代码停止在2,同时仍然参考3进行计算.
给定以下数据框和数据透视表:
import pandas as pd
df=pd.DataFrame({'A':['x','y','z','x','y','z'],
'B':['one','one','one','two','two','two'],
'C':[2,18,2,8,2,18]})
df
A B C
0 x one 2
1 y one 18
2 z one 2
3 x two 8
4 y two 2
5 z two 18
table = pd.pivot_table(df, index=['A', 'B'],aggfunc=np.sum)
C
A B
x one 2
two 8
y one 18
two 2
z one 2
two 18
Run Code Online (Sandbox Code Playgroud)
我想在此数据透视表中添加2列; 一个显示所有值的百分比,另一个显示列A中的百分比,如下所示:
C % of Total % of B
A B
x one 2 4% 10%
two 18 36% 90%
y …
Run Code Online (Sandbox Code Playgroud) 给定以下GeoDataFrame:
h=pd.DataFrame({'zip':[19152,19047],
'Lat':[40.058841,40.202162],
'Lon':[-75.042164,-74.924594]})
crs='none'
geometry = [Point(xy) for xy in zip(h.Lon, h.Lat)]
hg = GeoDataFrame(h, crs=crs, geometry=geometry)
hg
Lat Lon zip geometry
0 40.058841 -75.042164 19152 POINT (-75.042164 40.058841)
1 40.202162 -74.924594 19047 POINT (-74.924594 40.202162)
Run Code Online (Sandbox Code Playgroud)
我需要像使用另一个GeoDataFrame一样设置CRS(像这样):
c=c.to_crs("+init=epsg:3857 +ellps=GRS80 +datum=GGRS87 +units=mi +no_defs")
Run Code Online (Sandbox Code Playgroud)
我试过这个:
crs={'init': 'epsg:3857'}
Run Code Online (Sandbox Code Playgroud)
还有这个:
hg=hg.to_crs("+init=epsg:3857 +ellps=GRS80 +datum=GGRS87 +units=mi +no_defs")
Run Code Online (Sandbox Code Playgroud)
......但没有运气.
一些重要的说明:
上面.to_crs方法工作的另一个GeoDataFrame来自一个形状文件,几何列是多边形而不是点.在应用.to_crs方法后,其"几何"值看起来像这样:
POLYGON((-5973.005380655156 3399.646267693398 ...当我用hg GeoDataFrame尝试上面的内容时,它们仍然看起来像常规的纬度/经度坐标.
如果/当这个结果出来时,我会用多边形GeoDataFrame连接这些点,以便绘制两个(多边形顶部的点).
当我在使用.to_crs方法之前首先尝试连接GeoDataFrames,然后我一次在点和多边形行上使用该方法时,我收到以下错误:
ValueError:无法转换朴素几何.请先在对象上设置crs.
提前致谢!
鉴于此热图:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data)
Run Code Online (Sandbox Code Playgroud)
我如何才能以百分比格式显示颜色条值?另外,如果我只是想在彩条上显示第一个和最后一个值,该怎么办?
提前致谢!
鉴于以下条形图:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({'A': ['A', 'B'], 'B': [1000,2000]})
fig, ax = plt.subplots(1, 1, figsize=(2, 2))
df.plot(kind='bar', x='A', y='B',
align='center', width=.5, edgecolor='none',
color='grey', ax=ax)
plt.xticks(rotation=25)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想将y-tick标签显示为数千美元,如下所示:
$ 2,000个
我知道我可以用它来添加一个美元符号:
import matplotlib.ticker as mtick
fmt = '$%.0f'
tick = mtick.FormatStrFormatter(fmt)
ax.yaxis.set_major_formatter(tick)
Run Code Online (Sandbox Code Playgroud)
...这是为了添加一个逗号:
ax.get_yaxis().set_major_formatter(
mtick.FuncFormatter(lambda x, p: format(int(x), ',')))
Run Code Online (Sandbox Code Playgroud)
......但是如何同时获得两者?
提前致谢!
我有一个包含许多选项卡的Excel工作簿.每个选项卡与其他选项卡具有相同的标头集.我想将每个选项卡中的所有数据合并到一个数据框中(不重复每个选项卡的标题).
到目前为止,我已经尝试过:
import pandas as pd
xl = pd.ExcelFile('file.xlsx')
df = xl.parse()
Run Code Online (Sandbox Code Playgroud)
可以使用某些东西来表示"所有电子表格"的解析参数吗?或者这是错误的方法?
提前致谢!
更新:我试过:
a=xl.sheet_names
b = pd.DataFrame()
for i in a:
b.append(xl.parse(i))
b
Run Code Online (Sandbox Code Playgroud)
但它不是"有效".
python-3.x ×9
python ×3
seaborn ×3
geopandas ×2
matplotlib ×2
pandas ×2
comma ×1
display ×1
dollar-sign ×1
excel ×1
group-by ×1
heatmap ×1
list ×1
loops ×1
percentage ×1
pivot-table ×1
rank ×1