我正在阅读Wes Mckinney的Python for Data Analysis,但我对这种数据操作感到惊讶.你可以看到这里的所有程序,但我会在这里总结一下.假设你有这样的东西:
In [133]: agg_counts = by_tz_os.size().unstack().fillna(0)
Out[133]:
a Not Windows Windows
tz 245 276
Africa/Cairo 0 3
Africa/Casablanca 0 1
Africa/Ceuta 0 2
Africa/Johannesburg 0 1
Africa/Lusaka 0 1
America/Anchorage 4 1
...
Run Code Online (Sandbox Code Playgroud)
tz表示时区和Not Windows和Windows是从原始数据中的用户代理提取的类别,因此我们可以从收集的数据中看到非洲/开罗有3个Windows用户和0个非Windows用户.
然后,为了获得"顶级整体时区",我们有:
In [134]: indexer = agg_counts.sum(1).argsort()
Out[134]:
tz
24
Africa/Cairo 20
Africa/Casablanca 21
Africa/Ceuta 92
Africa/Johannesburg 87
Africa/Lusaka 53
America/Anchorage 54
America/Argentina/Buenos_Aires 57
America/Argentina/Cordoba 26
America/Argentina/Mendoza 55
America/Bogota 62
...
Run Code Online (Sandbox Code Playgroud)
那么在那一点上,我会认为根据文档我对列(in sum(1))进行求和,然后根据显示参数的结果进行排序(通常在argsort中).首先,我不确定在本系列的上下文中它是什么意思"列",因为sum(1)实际上是求和Not Windows,Windows用户将该值保持在与其时区相同的行中.此外,我无法看到argsort值与之间的相关性agg_counts.例如,Pacific/Auckland"argsort值"(in In[134])为0,它只有11 Windows和Not Windows用户之和.Asia/Harbinargsort值为1,并显示为3 Windows和非Windows用户的总和.
有人可以向我解释那里发生了什么吗?显然我误解了一些事情.
sum(1)意思是总和axis = 1。该术语来自numpy.
对于 2+ 维对象,0 轴指的是行。对 0 轴求和意味着对行求和,相当于“垂直”求和(查看表格时)。
1 轴指的是列。对 1 轴求和意味着对列求和,相当于“水平”求和。
numpy.argsort返回一个索引数组,告诉您如何对数组进行排序。例如:
In [72]: import numpy as np
In [73]: x = np.array([521, 3, 1, 2, 1, 1, 5])
In [74]: np.argsort(x)
Out[74]: array([2, 4, 5, 3, 1, 6, 0])
Run Code Online (Sandbox Code Playgroud)
返回的数组中的 2 表示isnp.argsort中的最小值,等于。下一个最小的也是1。依此类推。xx[2]1x[4]
如果我们定义
totals = df.sum(1)
print(totals)
# tz 521
# Africa/Cairo 3
# Africa/Casablanca 1
# Africa/Ceuta 2
# Africa/Johannesburg 1
# Africa/Lusaka 1
# America/Anchorage 5
Run Code Online (Sandbox Code Playgroud)
然后totals.argsort()是 arg 对值进行排序[521, 3, 1, 2, 1, 1, 5]。我们已经看到了结果;它与numpy.argsort:
[2, 4, 5, 3, 1, 6, 0]
Run Code Online (Sandbox Code Playgroud)
这些值简单地制成Series,与index相同totals:
print(totals.argsort())
# tz 2
# Africa/Cairo 4
# Africa/Casablanca 5
# Africa/Ceuta 3
# Africa/Johannesburg 1
# Africa/Lusaka 6
# America/Anchorage 0
Run Code Online (Sandbox Code Playgroud)
将 与此 argsort 索引相关联totals.index似乎没有内在含义,但如果您计算,totals[totals.argsort()]您会看到totals按排序顺序排列的行:
print(totals[totals.argsort()])
# Africa/Casablanca 1
# Africa/Johannesburg 1
# Africa/Lusaka 1
# Africa/Ceuta 2
# Africa/Cairo 3
# America/Anchorage 5
# tz 521
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1027 次 |
| 最近记录: |