繁体   English   中英

如何折叠/分组熊猫中的列

[英]How to collapse/group columns in pandas

我有列名作为天数的数据,最多 3000 列,值为 0/1,例如; 样本数据

并希望将列转换/分组为每周(week_1 中的 1-7 和 week_2 中的 8-14),例如; 输出数据

如果 1-7 之间的列至少有 1,那么 week_1 应该返回 1,否则返回 0。

将第一列转换为索引,然后通过由7的整数除法创建的辅助数组聚合max并添加1

pd.options.display.max_columns = 30

np.random.seed(2020)
df = pd.DataFrame(np.random.choice([1,0], size=(5, 21), p=(0.1, 0.9)))
df.columns += 1
df.insert(0, 'id', 1000 + df.index)
print (df)
     id  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  \
0  1000  0  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   
1  1001  0  0  0  0  0  1  0  0  0   0   0   0   0   0   0   0   0   0   0   
2  1002  0  0  1  0  0  0  0  0  0   0   0   0   0   1   0   0   0   0   0   
3  1003  0  0  1  0  0  0  0  0  0   0   1   0   0   0   0   1   0   0   0   
4  1004  0  1  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   

   20  21  
0   0   0  
1   0   0  
2   0   0  
3   0   0  
4   0   0  

df = df.set_index('id')
arr = np.arange(len(df.columns)) // 7 + 1
df = df.groupby(arr, axis=1).max().add_prefix('week_').reset_index()

print (df)
     id  week_1  week_2  week_3
0  1000       0       0       0
1  1001       1       0       0
2  1002       1       1       0
3  1003       1       1       1
4  1004       1       0       0
import pandas as pd
import numpy as np

id = list(range(1000, 1010))
cl = list(range(1,22))
data_ = np.random.rand(10,21)
data_
client_data = pd.DataFrame(data=data_, index=id, columns=cl)


def change_col(col_hd=int):
    week_num = (col_hd + 6) // 7
    week_header = 'week_' + str(week_num)
    return week_header


new_col_header = []
for c in cl:
    new_col_header.append(change_col(c))

client_data.columns = new_col_header

client_data.columns.name = 'id'

client_data.groupby(axis='columns', level=0).sum()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM