可以说我有一个数据帧
df=pd.DataFrame({'Location': [ 'Ala', 'SS', 'Ala', 'Ala', 'SS', 'Ala', 'SS', 'TXE', 'TXE', 'TXE'],
'Bid': ['E','N','E','N','N','E', 'E',np.nan,np.nan,'A']})
Run Code Online (Sandbox Code Playgroud)
如果S是密封投标,N是没有投标的人,Nan不存在,O是公开投标.
我想计算出公式为(E + A)/(E + A + N)的投标人的百分比.做透视表然后实现等式的最佳方法是什么?
df=pd.DataFrame({'Location': [ 'Ala', 'SS', 'Ala', 'Ala', 'SS', 'Ala', 'SS', 'TXE', 'TXE', 'TXE'],
'Bid': ['E','N','E','N','N','E', 'E',np.nan,np.nan,'A']})
pt = df.pivot_table(rows='Location', cols='Bid', aggfunc='size', fill_value=0)
pt['Percentage']=(pt.A + pt.E)/(pt.A+pt.E+pt.N)
print (pt)
>>>
Bid A E N Percentage
Location
Ala 0 3 1 0.750000
SS 0 1 2 0.333333
TXE 1 0 0 1.000000
[3 rows x 4 columns]
Run Code Online (Sandbox Code Playgroud)
这是计算百分比的最佳方式还是比枢轴表有更好的方法?
也许这不够通用,但你可以得到百分比
counts = df3['Bid'].value_counts(normalize=True)
Run Code Online (Sandbox Code Playgroud)
然后查找(E+A)所有出价的百分比就像这样简单
counts.E + counts.A
Run Code Online (Sandbox Code Playgroud)
如果您不想NaN在百分比计算中包含出价,那么
counts = df3['Bid'].dropna().value_counts(normalize=True)
Run Code Online (Sandbox Code Playgroud)
如果还有其他出价类型,则需要排除
all_allowable = df3['Bid'].isin(['E', 'A', 'N'])
counts = df3[all_allowable]['Bid'].value_counts(normalize=True)
Run Code Online (Sandbox Code Playgroud)
按位置拆分
all_allowable = df3['Bid'].isin(['E', 'A', 'N'])
df3[all_allowable].groupby('Location')['Bid'].value_counts(normalize=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7200 次 |
| 最近记录: |