Python 基于发生次数的新数据帧
我想创建一个新的数据框,它只包含发生次数最多的行: 我的代码如下:Python 基于发生次数的新数据帧,python,pandas,dataframe,slice,Python,Pandas,Dataframe,Slice,我想创建一个新的数据框,它只包含发生次数最多的行: 我的代码如下: 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.dr
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
您可以从
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_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
是计数至少为max的所有项目的索引
- 现在只需检查
Symbol
列中的哪些条目在结果中
你可以试试
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
是计数至少为max的所有项目的索引
- 现在只需检查
Symbol
列中的哪些条目在结果中
您可以将其用于此目的
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
你可以用它来达到这个目的
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
如何删除索引:8,9,10,11,12,0,1。我想您可以在末尾添加.reset\u index(drop=True)
将索引重置为默认整数索引。如何删除索引:8,9,10,11,12,0,1。我认为您可以在末尾添加.reset\u index(drop=True)
将索引重置为默认整数索引。