假設(shè)我有一個(gè)如下的數(shù)據(jù)框:df = pd.DataFrame({ 'ids' : ['1', '1', '1', '1', '2', '2', '2', '3', '3'], 'values' : ['5', '8', '7', '12', '2', '1', '3', '15', '4'] }, dtype='int32')ids values1 51 71 81 122 12 32 23 43 15我想要做的是遍歷values列并檢查哪些值大于 6,并且ids必須將列中的相應(yīng) id附加到空列表中。即使一個(gè) id(比如 3)有多個(gè)值,并且在這些多個(gè)值(4 和 15)中,只有一個(gè)值大于 6,我希望將相應(yīng)的 id 附加到列表中。示例: 假設(shè)我們對上述數(shù)據(jù)幀 df 運(yùn)行一個(gè)循環(huán),我希望輸出如下:more = [1, 3]less = [2]以more =[]和less = []為預(yù)初始化空列表到目前為止我所擁有的: 我嘗試實(shí)施相同的方法,但我肯定犯了一些錯(cuò)誤。我有的代碼:less = []more = []for value in df['values']: for id in df['ids']: if (value > 6): more.append(id) else: less.append(id)
2 回答

四季花海
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
使用groupby布爾索引來創(chuàng)建您的列表。這將比循環(huán)快得多:
g = df.groupby('ids')['values'].max()
mask = g.gt(6)
more = g[mask].index.tolist()
less = g[~mask].index.tolist()
print(more)
print(less)
[1, 3]
[2]

元芳怎么了
TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以使用數(shù)據(jù)幀索引來刪除所有大于 6 的索引并使用以下方法創(chuàng)建一組唯一索引:
setA = set(df[df['values'] > 6]['ids'])
這將在數(shù)據(jù)框中創(chuàng)建一組所有索引:
setB = set(df['ids'])
現(xiàn)在,
more = list(setA)
對于less
,取集差:
less = list(setB.difference(setA))
而已!
添加回答
舉報(bào)
0/150
提交
取消