python - 如何处理列名和创建新列

标签 python pandas dataframe

这是我的 pandas DataFrame,带有原始列名。

old_dt_cm1_tt   old_dm_cm1   old_rr_cm2_epf   old_gt
1               3            0                0
2               1            1                5
  1. 首先,我想提取 cm 的所有独特变体,例如在本例中为 cm1cm2
  2. 在此之后,我想为每个唯一的 cm 创建一个新列。在此示例中,应该有 2 个新列。
  3. 最后,在每个新列中,我应该存储非零原始列值的总数,即
old_dt_cm1_tt   old_dm_cm1   old_rr_cm2_epf   old_gt    cm1    cm2    
1               3            0                0         2      0        
2               1            1                5         2      1

我实现了第一步如下:

cols = pd.DataFrame(list(df.columns))
ind = [c for c in df.columns if 'cm' in c]
df.ix[:, ind].columns

如何继续步骤 2 和 3,以便解决方案是自动的(我不想手动定义列名 cm1cm2,因为在原始数据集我可能有很多 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')

现在您可以将列更改为新值,例如 cm1cm2cm3

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 更改为 bool 值 DataFramesum - True 是转换为 1False0。您需要按唯一的列名进行计数 - 所以 groupby列和 sum值(value)观。

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']

最后,您可以通过 df[['cm1','cm2']]groupby 函数添加新列:

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

关于python - 如何处理列名和创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35942709/

相关文章:

python - 如果列表包含 float ,如何在列表中选择相同的值

python - 使用opencv规范化曲线以形成矩形

python-3.x - 如何每 5 行后从列中选择值并将值赋给变量

python - 根据日期和序列号连接两个数据框?

python - 使用 DataFrame 的两列计算一些指标

python - 无法按行拆分网页抓取的表格

python - 在读取 csv 或 tsv 文件之前在 Pandas DataFrame 列上应用条件

python - 如何将嵌套列表作为输入?

python - 如何在我的 Google App Engine 项目中使用 Django 1.2 模板?

python - 在循环python中更改数据框列中的值