0
Buddys行を選択するには:私はのようなデータフレームを持っている:パンダ:GROUPBY機能内のいくつかの基準のパリで
df = pd.DataFrame({'code':'A','A','A','A','A','A','B','B','B', 'B','B','B'), 'Times': (1,2,3,4,5,6,1,2,3,4,5,6),'Figure':(2.3,4.1,5.2,7.0,1.8,9.0,4.2,7.9,4.6,1.4,9.7,1.2)})
ので、このような構造:
>>> df
Figure Times code
0 2.3 1 A
1 4.1 2 A
2 5.2 3 A
3 7.0 4 A
4 1.8 5 A
5 9.0 6 A
6 4.2 1 B
7 7.9 2 B
8 4.6 3 B
9 1.4 4 B
10 9.7 5 B
11 1.2 6 B
は、今私は、各コード内にしたいがグループ( 'A'、 'B')は、[[4,1]、[6,1]、[3,2]]でTimesがペアになっている場合にのみFigureの差分を計算します。だから、希望する新しいデータフレームは、この希望:もちろん
>>> newdf
code diffFigure diffTimes
0 A 4.7 4-1
1 A 6.7 3-2
2 A 1.1 6-1
3 B -3.3 4-1
4 B -2.8 3-2
5 B -3.0 6-1
を、私はGROUPBY関数を使用して関数を適用したいと思います:
def f(x):
myList = [[4,1],[6,1],[3,2]]
for i in x.itertuples():
for j in x.itertuples():
if (i.Times, j.Times) in myList:
print (i.code + ": " + str(i.Times) + "-" + str(j.Times) + "=" + str(i.Figure - j.Figure))
newdf = df.groupby('code').apply(f)
しかし、私は希望のデータフレームを取得傾けます。ここでは2つの問題:まず、すべての行を列挙するためにitertuplesを使用しない可能性のある方法はありますか?次に、関数fで、希望のデータフレームを得るためにリターン形式を設計する方法は?
多くのおかげ
ありがとう:
そして結合操作データフレームに
myList
を回すと内側を行うことによってmyList
にあるペアのサブセットを取ります。私は、第2の解決策がTimesのすべての組み合わせを考慮するので、第1の解決策を優先し、より多くの失効を有する可能性がある。 – lkonweb相対的なパフォーマンスは、あなたが 'myList'に持っているエントリの数にも依存します。 pandas関数の呼び出しは一般的に遅いので、forループを何度も繰り返す必要がある場合は、データをメモリに収めることができる限り、大きなマージ、計算、およびサブセットを行うほうが速くなります。 –