[英]Python: For each unique ID, find its code and its value and calculate the ratio
實際數據幀包含超過一百萬行。
例如說一個數據框是:
UniqueID Code Value OtherData
1 A 5 Z01
1 B 6 Z02
1 C 7 Z03
2 A 10 Z11
2 B 11 Z24
2 C 12 Z23
3 A 10 Z21
4 B 8 Z10
我想獲得每個 UniqueID 的 A/B 比率並將其放入新的數據框中。 例如,對於 UniqueID 1,其 A/B 的比率 = 5/6。
在 Python 中執行此操作的最有效方法是什么?
想:
UniqueID RatioAB
1 5/6
2 10/11
3 Inf
4 0
謝謝你。
一種方法是使用pivot_table
,在多次出現相同字母的情況下與sum
聚合(否則一個簡單的樞軸就可以了),並在A
和B
列上進行評估:
df.pivot_table(index='UniqueID', columns='Code', values='Value', aggfunc='sum').eval('A/B')
UniqueID
1 0.833333
2 0.909091
3 NaN
4 NaN
dtype: float64
如果每組每個字母最多出現一次:
df.pivot(index='UniqueID', columns='Code', values='Value').eval('A/B')
UniqueID
1 0.833333
2 0.909091
3 NaN
4 NaN
dtype: float64
如果您只關心 A/B 比率:
df1 = df[df['Code'].isin(['A','B'])][['UniqueID', 'Code', 'Value']]
df1 = df1.pivot(index='UniqueID',
columns='Code',
values='Value')
df1['RatioAB'] = df1['A']/df1['B']
最明顯的方式是通過 groupby。
df.groupby('UniqueID').apply(lambda g: g.query("Code == 'A'")['Value'].iloc[0] / g.query("Code == 'B'")['Value'].iloc[0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.