小编rob*_*roc的帖子

pandas:如何查找列中每个类别的最大n值

我有一个巨大的市政图书馆目录数据集,包括书名,它所在的图书馆,图书馆的自治市镇以及借出的次数.

我想为每个社区找到最受欢迎的三本书.

理想情况下,我会得到这样的东西:

Borough    Title    Total_loans
A          Book1    35615 
A          Book2    34895
A          Book3    2548
B          Book1    6541
B          Book2    5425
Run Code Online (Sandbox Code Playgroud)

等等

这是我能够得到的最接近的,但结果数据框架没有按行政区划分,难以阅读.

import pandas as pd

df = pd.DataFrame({"borough":["A", "B", "B", "A", "A"], "title":["Book2", "Book1", "Book2", "Book2", "Book1"], "total_loans":[4, 48, 46, 78, 15]})

top_boroughs = df.groupby(['borough','title'])
top_boroughs.aggregate(sum).sort(['total_loans','title'], ascending=False)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

python pandas

9
推荐指数
1
解决办法
1万
查看次数

将pandas数据框重塑为与重复行一样多的列

我有这个数据框:

>> df = pd.DataFrame({'Place' : ['A', 'A', 'B', 'B', 'C', 'C'], 'Var' : ['All', 'French', 'All', 'German', 'All', 'Spanish'], 'Values' : [250, 30, 120, 12, 200, 112]})

>> df
  Place  Values      Var
0     A     250      All
1     A      30   French
2     B     120      All
3     B      12   German
4     C     200      All
5     C     112  Spanish
Run Code Online (Sandbox Code Playgroud)

它具有每行两行的重复模式Place.我想重塑它,因此它是每行一行Place,Var列变成两列,一列用于"全部",另一列用于另一列.

像这样:

Place   All   Language   Value
    A   250     French      30
    B   120     German      12
    C   200     Spanish …
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
325
查看次数

Matplotlib:使用 PySAL 自然中断时颜色条中断

我正在根据本教程制作区域分布图。

但不是将数据分成相等的间隔,如下所示:

bins = np.linspace(values.min(), values.max(), 7)

我正在使用 PySAL 的 Jenks 自然中断,因为我的数据分布不均匀:

from pysal.esda.mapclassify import Natural_Breaks as nb
# values is a pandas Series 
breaks = nb( values, initial=150, k = 7)
Run Code Online (Sandbox Code Playgroud)

这使地图颜色看起来不错,但它弄乱了图例:

传奇1

所以我尝试为地图分配 Jenks 颜色,并为图例分配相等的间隔,但发生了这种情况:

传奇2

颜色条被分配了正确的刻度标签,但位置错误。所以我的问题是:我怎样才能让颜色条的间隔相等,但刻度标签是正确位置的自然中断值?

这是图例的相关代码:

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from pysal.esda.mapclassify import Natural_Breaks as nb

values = pd.Series([71664, 65456, 60378, 50128, 46618, 44028, 42642, 41237, 35300, 34891, 34848, 33089, 29964, 25193, 25088, 23879, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas

5
推荐指数
1
解决办法
638
查看次数

Seaborn/Matplotlib:如何访问 FacetGrid 中的线值?

我试图在 Seaborn FacetGrid 中对两条线之间的区域进行着色。该fill_between方法将执行此操作,但我需要访问每个子图中每行的值以将它们传入。

这是我的代码:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

data = [{'Change': 0.0,  'Language': 'Algonquin',  'Type': 'Mother tongue',  'Year': '2011'}, {'Change': 0.0,  'Language': 'Algonquin',  'Type': 'Spoken at home',  'Year': '2011'}, {'Change': -21.32,  'Language': 'Algonquin',  'Type': 'Mother tongue',  'Year': '2016'}, {'Change': -34.84,  'Language': 'Algonquin',  'Type': 'Spoken at home',  'Year': '2016'}, {'Change': 0.0,  'Language': 'Atikamekw',  'Type': 'Mother tongue',  'Year': '2011'}, {'Change': 0.0,  'Language': 'Atikamekw',  'Type': 'Spoken at home',  'Year': '2011'}, {'Change': 5.41, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas seaborn

5
推荐指数
1
解决办法
2104
查看次数

pandas:计算分组平均值的差异

我有多个传感器按月和年的传感器数据:

import pandas as pd
df = pd.DataFrame([
 ['A', 'Jan', 2015, 13], 
 ['A', 'Feb', 2015, 10], 
 ['A', 'Jan', 2016, 12], 
 ['A', 'Feb', 2016, 11], 
 ['B', 'Jan', 2015, 7],
 ['B', 'Feb', 2015, 8], 
 ['B', 'Jan', 2016, 4], 
 ['B', 'Feb', 2016, 9]
], columns = ['sensor', 'month', 'year', 'value'])

In [2]: df
Out[2]:
    sensor month  year  value
0      A   Jan  2015     13
1      A   Feb  2015     10
2      A   Jan  2016     12
3      A   Feb  2016     11
4      B   Jan  2015      7 …
Run Code Online (Sandbox Code Playgroud)

python pandas

3
推荐指数
1
解决办法
1921
查看次数

熊猫:根据时间间隔加入数据帧

我有一个数据框,每 10 分钟有一个日期时间列和一个数值:

df1 = pd.DataFrame({'time' : pd.date_range('1/1/2018', periods=20, freq='10min'), 'value' : np.random.randint(2, 20, size=20)})
Run Code Online (Sandbox Code Playgroud)

另一个有事件时间表,有开始时间和结束时间。可以同时发生多个事件:

df2 = pd.DataFrame({'start_time' : ['2018-01-01 00:00:00', '2018-01-01 00:00:00','2018-01-01 01:00:00', '2018-01-01 01:00:00', '2018-01-01 01:00:00', '2018-01-01 02:00:00' ], 'end_time' : ['2018-01-01 01:00:00', '2018-01-01 01:00:00', '2018-01-01 02:00:00','2018-01-01 02:00:00', '2018-01-01 02:00:00', '2018-01-01 03:00:00'], 'event' : ['A', 'B', 'C', 'D', 'E', 'F'] })
df2[['start_time', 'end_time']] = df2.iloc[:,0:2].apply(pd.to_datetime)
Run Code Online (Sandbox Code Playgroud)

我想对 df1 进行左连接,所有事件都在开始和结束时间内。我的输出表应该是:

                  time  value event
0  2018-01-01 00:00:00      5     A
1  2018-01-01 00:00:00      5     B
2  2018-01-01 00:10:00     15     A
3 …
Run Code Online (Sandbox Code Playgroud)

python datetime pandas

3
推荐指数
1
解决办法
1610
查看次数

标签 统计

pandas ×6

python ×6

matplotlib ×2

datetime ×1

seaborn ×1