簡體   English   中英

如何找到一列的值,使得另一列中的值不大於 3

[英]How to find the values of a column such that no values in another column takes value greater than 3

我想找到與一列對應的值,以便另一列中的值沒有大於 3 的值。

例如,在以下數據框中

df = pd.DataFrame({'a':[1,2,3,1,2,3,1,2,3], 'b':[4,5,6,4,5,6,4,5,6], 'c':[4,3,5,4,3,5,4,3,3]})

我想要列 'a' 的值,其中 'c' 的所有值都大於 3。

我認為 groupby 是正確的方法。 我下面的代碼更接近它。

df.groupby('a')['c'].max()>3
a
1     True
2    False
3     True
4    False
Name: c, dtype: bool

上面的代碼給了我一個布爾框架。 我怎樣才能得到 'a' 的值,使其為真。 我希望我的輸出是 [1,3]

在非常大的數據框(超過 3000 萬行)上,是否有更好、更有效的方法來獲取它。

從您的代碼中,我看到您實際上想要輸出:

  • 每個組的組鍵( dfa分組),
  • 其中c列(在當前組內)中沒有值大於3

為了得到一些非空的結果,讓我們將源 DataFrame 更改為:

   a  b  c
0  1  4  4
1  2  5  1
2  3  6  5
3  1  4  4
4  2  5  2
5  3  6  5
6  1  4  4
7  2  5  2
8  3  6  3

為了可讀性,讓我們將dfa分組並打印每個組。 執行此操作的代碼:

for key, grp in df.groupby('a'):
    print(f'\nGroup: {key}\n{grp}')

給出結果:

Group: 1
   a  b  c
0  1  4  4
3  1  4  4
6  1  4  4

Group: 2
   a  b  c
1  2  5  1
4  2  5  2
7  2  5  2

Group: 3
   a  b  c
2  3  6  5
5  3  6  5
8  3  6  3

現在看看每個組。 只有第2組滿足c列中每個元素都小於3 的條件

所以實際上你需要一個groupbyfilter ,只傳遞滿足上述條件的組:

要從“好”組中獲取完整行,您可以運行:

df.groupby('a').filter(lambda grp: grp.c.lt(3).all())

得到:

   a  b  c
1  2  5  1
4  2  5  2
7  2  5  2

但是您只需要列中的值,而不需要重復。 所以將上面的代碼擴展為:

df.groupby('a').filter(lambda grp: grp.c.lt(3).all()).a.unique().tolist()

得到:

[2]

請注意,您的代碼: df.groupby('a')['c'].max() > 3是錯誤的,因為它標記了最大大於3 的True組(而不是 ">" 應該有" <”)。

所以另一種解決方案是:

res = df.groupby('a')['c'].max()<3
res[res].index.tolist()

給出相同的結果。

另一種解決方案可以基於列表理解:

[ key for key, grp in df.groupby('a') if grp.c.lt(3).all() ]

細節:

  • for key, grp in df.groupby('a') - 創建組,
  • if grp.c.lt(3).all() - 過濾組,
  • key (在開始時) - 將特定的組鍵添加到結果中。
import pandas as pd

#Create DataFrame
df = pd.DataFrame({'a':[1,2,3,1,2,3,1,2,3], 'b':[4,5,6,4,5,6,4,5,6], 'c':[4,3,5,4,3,5,4,3,3]})

#Write a function to find values greater than 3 if found return.
def grt(x):
   for i in x:
      if i>3:
         return(i)

#Groupby column a and call function grt       
p = {'c':grt}
grp = df.groupby(['a']).agg(p)
print(grp)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM