如何折叠/分组熊猫列

问题描述 投票:0回答:2

我的数据列名称为天,最多3000列,值0/1,例如;sample data

并且想将列按每周进行转换/分组(第1周的1-7和第2周的8-14),例如;output data

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

python pandas grouping multiple-columns collapse
2个回答
2
投票

将第一列转换为索引,然后通过由max的整数除法创建并添加7的帮助器数组聚合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

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()
© www.soinside.com 2019 - 2024. All rights reserved.