[英]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.