簡體   English   中英

計算unique()的返回值

[英]counting returned values of unique( )

我有一個數據框,df1

     Date        inp  name   
0  2017-08-07  2.3.6  ABC 
1  2017-08-07  2.3.6  ABC      
2  2017-08-08  2.3.6  TAC         
3  2017-08-22  2.5.9  TTT         
4  2017-09-23  0.8.0  TAC         
5  2017-10-09  2.3.6  ABC         
6  2017-10-09  2.3.6  TAC
7  2017-10-09  2.3.6  TAC                  
8  2017-10-23  0.8.0  TAC         
9  2017-11-08  6.2.6  ABC        

然后是另一個數據框df2

                2.3.6ABC  2.3.6TAC  2.5.9TTT      
August            2         1            0            
September         0         0            0             
October           1         2            0             
November          0         0            1             

另一個數據框df3

                2.3.6ABC  2.3.6TAC       
August            2         1                      
September         0         0                         
October           1         2                        
November          0         0                        

我想在df1的“ inp”列中獲得不同的值,在這種情況下為4。然后,在這種情況下,df2和df3的列數為3和2。 如何通過重命名索引,然后在df1中獲取df2和df3的百分比,如何在新數據框中存儲2個數據幀df2和df3的列數。 它看起來應該像這樣:

                     noOfColumn      pct
    df2 as sat         3         3/4=75                      
    df3 as nath        2         2/4=50                        

我無法超越這一點

st=pd.Dataframe(df1)
st=df['inp'].unique()
st2=st.count()

因為我一直得到這個:AttributeError:'numpy.ndarray'對象沒有屬性'count'

根據https://docs.scipy.org/doc/numpy-1.13.0/reference/generation/numpy.ndarray.html上的文檔,我懷疑您想要的是大小,而不是數量

size給出ndarray中的項目數。

維護數據框列表-

df_list = [df2, df3]

在循環中,建立一系列列表(還有其他方法可以做到這一點,但這是其中一種),其中列數和索引的名稱為-

r = [
     pd.Series(len(df.columns), index=['df{}'.format(i)]) 
     for i, df in enumerate(df_list, 2)
]

要么,

r = []
for i, df in enumerate(df_list, 2):
    r.append(pd.Series(len(df.columns), index=['df{}'.format(i)]))

現在,連接並計算pct變化。 另外,你要nunique ,獲得唯一值的數量( unique + size為對方的回答建議不pandaic) -

v = pd.concat(r).to_frame(name='noOfColumn')  
v['pct'] = v['noOfColumn'] / df1.inp.nunique()

v

     noOfColumn   pct
df2           3  0.75
df3           2  0.50

一種替代方法是將索引和值收集在單獨的列表中,並一次調用DataFrame構造函數-

idx, v = [], []
for i, df in enumerate(df_list, 2):
    idx.append('df{}'.format(i))
    v.append(len(df.columns))

最后,

df = pd.DataFrame(v, index=idx, columns=['noOfColumn'])
df['pct'] = df['noOfColumn'] / df1.inp.nunique()

df    
     noOfColumn   pct
df2           3  0.75
df3           2  0.50

暫無
暫無

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

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