1
trees=[
['species_1', observednumber_1, calculatedvalue, calculatedvalue],
['species_2', observednumber_2, calculatedvalue, calculatedvalue],
['species_1', observednumber_3, calculatedvalue, calculatedvalue],
[etc.]
]

これはサンプル サイトのデータです。各行は観察です。観察数、関与する種の数、および各種の数はさまざまです。つまり、各種の個体が複数存在する場合があります。(私は種の英数字コードの代用として種_1などを使用しました-数百の種が関係しており、各サイトにはほんの数種しかありません-コードを直接入力できるようにしたいです)。(観測) 行の数は約 20 ~ 30 で、種の数は 4 ~ 8 です。

各種の計算値を合計できる必要があります

これを行う唯一の方法は、リストを種ごとのリストに細分化することです。どうやってやるの?これが完了したら、列の合計を取得できます。

4

2 に答える 2

0

http://docs.python.org/2/library/itertools.html#itertools.groupbyを使用できます

import itertools as it, operator as op

# some dummy data so the example runs
observednumber_1 = 1
observednumber_2 = 2
observednumber_3 = 3
calculatedvalue = None

trees=[
  ['species_1', observednumber_1, calculatedvalue, calculatedvalue],
  ['species_2', observednumber_2, calculatedvalue, calculatedvalue],
  ['species_1', observednumber_3, calculatedvalue, calculatedvalue], ]

for k,g in it.groupby(sorted(trees,key=op.itemgetter(0)),key=op.itemgetter(0)):
  print k,sum(i[1] for i in g)

結果:

種_1 4
種_2 2

ノート:

  • への入力は、グループ化する列でソートするitertools.groupby 必要があります。
  • 変数kgは、それぞれ「キー」と「グループ」を表します。
  • gはジェネレーターであり、再利用したい場合は、リストまたは他のデータ構造に一時的に保存する必要があることに注意してください。

編集:別のデータ構造を使用してジェネレーターの結果を保存し、さらに計算する方法の例を追加しました。

for k,g in it.groupby(sorted(trees,key=op.itemgetter(0)),key=op.itemgetter(0)):
  tempg = list(g)
  print k, sum(i[1] for i in tempg), sum(i[2] for i in tempg)
于 2013-05-01T15:27:26.000 に答える