![](/img/trans.png)
[英]Count number of occurences of a particular value in each column in pandas dataframe
[英]pandas new dataframe based on number of occurences
我想創建一個僅包含出現次數最多的行的新數據框:
我的代碼如下:
import pandas as pd
f1=pd.read_csv('FILE1.csv')
f2=pd.read_csv('FILE2.csv')
df_all = f2.merge(f1, how='left', on='Symbol')
df_sort = df_all.sort_values(by=['Symbol','Date'], ascending=[True,True])
df_sort=df_sort.dropna()
df_cnt=df_sort['Symbol'].value_counts()
來自2個文件的原始數據合並到df_all中:
In[1]: f1
Out[2]:
Symbol Weight
0 IBM 0.2
1 GE 0.3
2 AAPL 0.4
3 XOM 0.1
In[2]: f2
Out[3]:
Date Symbol ClosingPrice
0 3/1/2010 IBM 116.51
1 3/2/2010 IBM 117.32
2 3/3/2010 IBM 116.40
3 3/4/2010 IBM 116.58
4 3/5/2010 IBM 117.61
5 3/1/2010 GE 45.00
6 3/2/2010 GE 43.50
7 3/3/2010 GE 46.00
8 3/1/2010 AAPL 85.07
9 3/2/2010 AAPL 85.10
10 3/3/2010 AAPL 86.20
11 3/4/2010 AAPL 84.93
12 3/5/2010 AAPL 84.80
13 3/1/2010 XOM 98.15
14 3/2/2010 XOM 99.00
15 3/3/2010 XOM 98.23
16 3/4/2010 XOM 97.56
17 3/1/2010 MSFT 99.00
18 3/2/2010 MSFT 98.00
19 3/3/2010 MSFT 97.00
20 3/4/2010 MSFT 98.00
21 3/5/2010 MSFT 97.00
In[4]:df_all
Out[4]:
Date Symbol ClosingPrice Weight
0 3/1/2010 IBM 116.51 0.2
1 3/2/2010 IBM 117.32 0.2
2 3/3/2010 IBM 116.40 0.2
3 3/4/2010 IBM 116.58 0.2
4 3/5/2010 IBM 117.61 0.2
5 3/1/2010 GE 45.00 0.3
6 3/2/2010 GE 43.50 0.3
7 3/3/2010 GE 46.00 0.3
8 3/1/2010 AAPL 85.07 0.4
9 3/2/2010 AAPL 85.10 0.4
10 3/3/2010 AAPL 86.20 0.4
11 3/4/2010 AAPL 84.93 0.4
12 3/5/2010 AAPL 84.80 0.4
13 3/1/2010 XOM 98.15 0.1
14 3/2/2010 XOM 99.00 0.1
15 3/3/2010 XOM 98.23 0.1
16 3/4/2010 XOM 97.56 0.1
17 3/1/2010 MSFT 99.00 NaN
18 3/2/2010 MSFT 98.00 NaN
19 3/3/2010 MSFT 97.00 NaN
20 3/4/2010 MSFT 98.00 NaN
21 3/5/2010 MSFT 97.00 NaN
然后,我對除去NaN值的數據進行排序:
In[5]: df_sort
Out[5]:
Date Symbol ClosingPrice Weight
8 3/1/2010 AAPL 85.07 0.4
9 3/2/2010 AAPL 85.10 0.4
10 3/3/2010 AAPL 86.20 0.4
11 3/4/2010 AAPL 84.93 0.4
12 3/5/2010 AAPL 84.80 0.4
5 3/1/2010 GE 45.00 0.3
6 3/2/2010 GE 43.50 0.3
7 3/3/2010 GE 46.00 0.3
0 3/1/2010 IBM 116.51 0.2
1 3/2/2010 IBM 117.32 0.2
2 3/3/2010 IBM 116.40 0.2
3 3/4/2010 IBM 116.58 0.2
4 3/5/2010 IBM 117.61 0.2
13 3/1/2010 XOM 98.15 0.1
14 3/2/2010 XOM 99.00 0.1
15 3/3/2010 XOM 98.23 0.1
16 3/4/2010 XOM 97.56 0.1
然后,我確定每個符號的出現總數
In[6]: df_cnt
Out[6]:
AAPL 5
IBM 5
XOM 4
GE 3
Name: Symbol, dtype: int64
在這一點上,我對如何創建一個新的數據幀df_final表示困惑,它僅包含出現次數為最大次數的數據。 。 。 在這種情況下5。
我的最終數據框應如下所示:
Date Symbol ClosingPrice Weight
3/1/2010 AAPL 85.07 0.4
3/2/2010 AAPL 85.10 0.4
3/3/2010 AAPL 86.20 0.4
3/4/2010 AAPL 84.93 0.4
3/5/2010 AAPL 84.80 0.4
3/1/2010 IBM 116.51 0.2
3/2/2010 IBM 117.32 0.2
3/3/2010 IBM 116.40 0.2
3/4/2010 IBM 116.58 0.2
3/5/2010 IBM 117.61 0.2
你可以找出Symbol
與最大群規模df_cnt
從和過濾行df_sort
:
df_sort[df_sort.Symbol.isin(df_cnt.index[df_cnt == df_cnt.max()])]
# Date Symbol ClosingPrice Weight
# 8 3/1/2010 AAPL 85.07 0.4
# 9 3/2/2010 AAPL 85.10 0.4
#10 3/3/2010 AAPL 86.20 0.4
#11 3/4/2010 AAPL 84.93 0.4
#12 3/5/2010 AAPL 84.80 0.4
# 0 3/1/2010 IBM 116.51 0.2
# 1 3/2/2010 IBM 117.32 0.2
# 2 3/3/2010 IBM 116.40 0.2
# 3 3/4/2010 IBM 116.58 0.2
# 4 3/5/2010 IBM 117.61 0.2
你可以試試
df_sort[df_sort.Symbol.isin(df_cnt[df_cnt >= df_cnt.max()].index)]
df_cnt.max()
是的最大值df_cnt
。
df_cnt[df_cnt >= df_cnt.max()].index
是計數至少為最大值的所有項目的索引。
現在,僅檢查結果中“ Symbol
列中的哪些條目。
您可以為此目的使用map
。
df_sort[df_sort['Symbol'].map(df_cnt==df_cnt.max())]
Date Symbol ClosingPrice Weight
8 3/1/2010 AAPL 85.07 0.4
9 3/2/2010 AAPL 85.10 0.4
10 3/3/2010 AAPL 86.20 0.4
11 3/4/2010 AAPL 84.93 0.4
12 3/5/2010 AAPL 84.80 0.4
0 3/1/2010 IBM 116.51 0.2
1 3/2/2010 IBM 117.32 0.2
2 3/3/2010 IBM 116.40 0.2
3 3/4/2010 IBM 116.58 0.2
4 3/5/2010 IBM 117.61 0.2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.