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對成對時才計算圖的差異。因此,所需的新數據幀將是這樣的:
>>> 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)
,但我不能獲得所需的數據幀。這裏有兩個問題:首先,任何可能的方式都不使用itertuples來枚舉所有行?其次在函數f中,如何設計返回格式以獲得所需的數據幀?
非常感謝
感謝分享。自從第二種解決方案考慮所有時代組合並可能有更多時間以來,我首選第一種解決方案。 – lkonweb
相對性能還取決於'myList'中有多少條目。調用熊貓函數的速度通常很慢,所以如果您必須多次循環遍歷for循環,只要能夠將數據放入內存中,只需執行一次大的合併,計算和子集就會更快。 –