7

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
    ...

tzはタイム ゾーンを意味し、元のデータのユーザー エージェントから抽出されたカテゴリNot WindowsWindowsあるため、収集されたデータから、アフリカ/カイロには 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
...

その時点で、ドキュメンテーションによると、列を合計し(sum(1))、引数を示す結果に従ってソートしていると思いました(通常はargsortで)。まず第一に、このシリーズのコンテキストで「列」が何を意味するのかわかりません。sum(1)実際には合計さNot Windowsれ、Windowsユーザーはその値をタイムゾーンと同じ行に保持しているためです。さらに、argsort 値とagg_counts. たとえばPacific/Auckland、「argsort 値」( ) が 0 で、合計が 11とusersIn[134]しかありません。argsort 値は 1 で、合計 3と Not Windows ユーザーで表示されます。WindowsNot WindowsAsia/HarbinWindows

誰かがそこで何が起こっているのか説明できますか? 明らかに私は何かを誤解しています。

4

2 に答える 2

4

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])

によって返される配列の 2 はnp.argsort、 の最小値でxありx[2]、 に等しくなり1ます。次に小さいのはx[4]これも 1 です。

定義すると

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

その後totals.argsort()、値をargsortingしています[521, 3, 1, 2, 1, 1, 5]。結果を見てきました。と同じnumpy.argsortです:

[2, 4, 5, 3, 1, 6, 0]

これらの値は、次のように単純に に変換さSeriesindexますtotals

print(totals.argsort())
# tz                     2
# Africa/Cairo           4
# Africa/Casablanca      5
# Africa/Ceuta           3
# Africa/Johannesburg    1
# Africa/Lusaka          6
# America/Anchorage      0

をこの 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
于 2012-12-06T22:11:57.133 に答える