我有一個與下面的示例類似的數(shù)據(jù)集:| id | old_a | old_b | new_a | new_b ||----|-------|-------|-------|-------|| 6 | 3 | 0 | 0 | 0 || 6 | 9 | 0 | 2 | 0 || 13 | 3 | 0 | 0 | 0 || 13 | 37 | 0 | 0 | 1 || 13 | 30 | 0 | 0 | 6 || 13 | 12 | 2 | 0 | 0 || 6 | 7 | 0 | 2 | 0 || 6 | 8 | 0 | 0 | 0 || 6 | 19 | 0 | 3 | 0 || 6 | 54 | 0 | 0 | 0 || 87 | 6 | 0 | 2 | 0 || 87 | 11 | 1 | 1 | 0 || 87 | 25 | 0 | 1 | 0 || 87 | 10 | 0 | 0 | 0 || 9 | 8 | 1 | 0 | 0 || 9 | 19 | 0 | 2 | 0 || 9 | 1 | 0 | 0 | 0 || 9 | 34 | 0 | 7 | 0 |我為上表提供了這個示例數(shù)據(jù)集:data=[[6,3,0,0,0],[6,9,0,2,0],[13,3,0,0,0],[13,37,0,0,1],[13,30,0,0,6],[13,12,2,0,0],[6,7,0,2,0], [6,8,0,0,0],[6,19,0,3,0],[6,54,0,0,0],[87,6,0,2,0],[87,11,1,1,0],[87,25,0,1,0],[87,10,0,0,0], [9,8,1,0,0],[9,19,0,2,0],[9,1,0,0,0],[9,34,0,7,0]]data= pd.DataFrame(data,columns=['id','old_a','old_b','new_a','new_b'])我想查看每個 id 的“new_a”和“new_b”列,即使每個 id 的這兩列中存在單個值,我也想將其計為 1,而不管任何值出現(xiàn)的次數(shù)并分配如果不存在任何值,則為 0。例如,如果我查看 id '9',new_a 中有兩個不同的值,但我想將其計為 1。同樣,對于 id '13',new_a 中沒有值,所以我想指定為 0。我的最終輸出應(yīng)該是這樣的:| id | new_a | new_b ||----|-------|-------|| 6 | 1 | 0 || 9 | 1 | 0 || 13 | 0 | 1 || 87 | 1 | 0 |我最終想計算使用 new_a 和 new_b 的客戶端百分比。所以從上表來看,75%的客戶端使用new_a,25%的客戶端使用new_b。我是 python 的初學(xué)者,不知道如何繼續(xù)。
1 回答

ITMISS
TA貢獻(xiàn)1871條經(jīng)驗 獲得超8個贊
使用GroupBy.any
, 因為0
像 s 一樣進(jìn)行處理False
并將輸出布爾值轉(zhuǎn)換為整數(shù):
df = data.groupby('id')[['new_a','new_b']].any().astype(int).reset_index()
print (df)
? ?id? new_a? new_b
0? ?6? ? ? 1? ? ? 0
1? ?9? ? ? 1? ? ? 0
2? 13? ? ? 0? ? ? 1
3? 87? ? ? 1? ? ? 0
mean對于上述輸出的使用百分比:
s = df[['new_a','new_b']].mean().mul(100)
print (s)
new_a? ? 75.0
new_b? ? 25.0
dtype: float64
添加回答
舉報
0/150
提交
取消