簡體   English   中英

在 pandas 中使用 value_count 函數時如何命名列?

[英]How to name the column when using value_count function in pandas?

我通過下面的代碼計算了角度和距離的出現次數:

g = new_df.value_counts(subset=['Current_Angle','Current_dist'] ,sort = False)

輸出:

current_angle    current_dist    0
 -50                30           1
 -50                40           2
 -50                41           6
 -50                45           4

嘗試1:
g.columns = ['angle','Distance','count','Percentage Missed'] - 結果是列名沒有變化

嘗試2:
當我使用print(g.columns)打印列時出現錯誤AttributeError: 'Series' object has no attribute 'columns'

我想將第0 列重命名為計數,並將一個新列添加到數據框g中,作為錯過的百分比,由 100 計算 - 第 0 列中的值

預期產出

current_angle    current_dist    count  percent missed
 -50                30           1          99
 -50                40           2          98
 -50                41           6          94
 -50                45           4          96

1:如何修改代碼? 我的意思是,除了 value_counts,還有其他函數可以提供預期的輸出嗎? 2. 如何用當前方法得到預期的輸出?

編輯1 (例外情況)

數據:

角度 距離 速度
0 124 -3
50 24 -25
50 34 25

預期輸出:

計數是根據距離計算的

角度 距離 速度 數數 錯過百分比
0 124 -3 1 99
50 24 -25 1 99
50 34 25 1 99

首先添加Series.reset_index ,因為DataFrame.value_counts返回Series ,所以可能使用參數name將列0更改為count列,然后通過Series.rsub將新列減去100以從右側減去100 - df['count']

df = (new_df.value_counts(subset=['Current_Angle','Current_dist'] ,sort = False)
            .reset_index(name='count')
            .assign(**{'percent missed': lambda x: x['count'].rsub(100)}))

或者,如果需要還設置新列名,請使用DataFrame.set_axis

df = (new_df.value_counts(subset=['Current_Angle','Current_dist'] ,sort = False)
            .reset_index(name='count')
            .set_axis(['angle','Distance','count'], axis=1)
            .assign(**{'percent missed': lambda x: x['count'].rsub(100)}))

如果需要在這里分配新的列名是替代解決方案:

df = (new_df.value_counts(subset=['Current_Angle','Current_dist'] ,sort = False)
            .reset_index())
df.columns = ['angle','Distance','count']
df['percent missed'] = df['count'].rsub(100)

假設 DataFrame 作為輸入(如果不是reset_index首先),只需使用rename和減法:

df = df.rename(columns={'0': 'count'})   # assuming string '0' here, else use 0
df['percent missed'] = 100 - df['count']

輸出:

   current_angle  current_dist  count  percent missed
0            -50            30      1              99
1            -50            40      2              98
2            -50            41      6              94
3            -50            45      4              96
替代方案:使用groupby.size
(new_df
 .groupby(['current_angle','current_dist']).size()
 .reset_index(name='count')
 .assign(**{'percent missed': lambda d: 100-d['count']})
)

輸出:

   current_angle  current_dist  count  percent missed
0            -50            30      1              99
1            -50            40      2              98
2            -50            41      6              94
3            -50            45      4              96

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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