python 新建一列_python – 如何处理列名称和创建新列
這是我的pandas DataFrame,帶有原始列名.
old_dt_cm1_tt old_dm_cm1 old_rr_cm2_epf old_gt
1 3 0 0
2 1 1 5
>首先,我想提取cm的所有獨特變體,例如在這種情況下cm1和cm2.
>在此之后,我想為每個獨特的cm創建一個新列.在此示例中,應該有2個新列.
>最后,在每個新列中,我應該存儲非零原始列值的總數,即
06001
我實現了第一步如下:
cols = pd.DataFrame(list(df.columns))
ind = [c for c in df.columns if 'cm' in c]
df.ix[:, ind].columns
如何繼續執行步驟2和3,以便解決方案是自動的(我不想手動定義列名cm1和cm2,因為在原始數據集中我可能有很多cm變化.
最佳答案 您可以使用:
print df
old_dt_cm1_tt old_dm_cm1 old_rr_cm2_epf old_gt
0 1 3 0 0
1 2 1 1 5
首先,您可以將filter列包含字符串cm,因此將刪除不包含cm的列.
df1 = df.filter(regex='cm')
現在,您可以將列更改為新值,如cm1,cm2,cm3.
print [cm for c in df1.columns for cm in c.split('_') if cm[:2] == 'cm']
['cm1', 'cm1', 'cm2']
df1.columns = [cm for c in df1.columns for cm in c.split('_') if cm[:2] == 'cm']
print df1
cm1 cm1 cm2
0 1 3 0
1 2 1 1
現在您可以計算非零值 – 將df1更改為布爾值DataFrame,將sum – True轉換為1并將False轉換為0.您需要按唯一列名稱計數 – 因此groupby列和sum值.
df1 = df1.astype(bool)
print df1
cm1 cm1 cm2
0 True True False
1 True True True
print df1.groupby(df1.columns, axis=1).sum()
cm1 cm2
0 2 0
1 2 1
您需要unique列,這些列將添加到原始df:
print df1.columns.unique()
['cm1' 'cm2']
最后你可以從groupby函數添加df [[‘cm1′,’cm2’]]的新列:
df[df1.columns.unique()] = df1.groupby(df1.columns, axis=1).sum()
print df
old_dt_cm1_tt old_dm_cm1 old_rr_cm2_epf old_gt cm1 cm2
0 1 3 0 0 2 0
1 2 1 1 5 2 1
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的python 新建一列_python – 如何处理列名称和创建新列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql多行合并成一行_数据文件合并与
- 下一篇: 已知旋转矩阵求角度_如何推导旋转矩阵