簡體   English   中英

Python:對於每個唯一的ID,找到它的代碼和它的值並計算比率

[英]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聚合(否則一個簡單的樞軸就可以了),並在AB列上進行評估:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM