Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据条件筛选、汇总和重塑数据帧_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 如何根据条件筛选、汇总和重塑数据帧

Python 如何根据条件筛选、汇总和重塑数据帧,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有以下数据帧 df=pd.DataFrame({'column1_T1':[1,0,0,1,1],'column1_issues': ['Comment1','abc','pqr','Comment2','Comment1'],'column2_T2':[0,0,1,0,1],'column2_issues':['OK','abc','Comment3','efg','Comment3']}) 它将如下所示 df 带有后缀T1、T2等的列包含1或0 带有后缀“issues”的列包

我有以下数据帧

df=pd.DataFrame({'column1_T1':[1,0,0,1,1],'column1_issues':     ['Comment1','abc','pqr','Comment2','Comment1'],'column2_T2':[0,0,1,0,1],'column2_issues':['OK','abc','Comment3','efg','Comment3']}) 

它将如下所示 df

带有后缀T1、T2等的列包含1或0

带有后缀“issues”的列包含有关相应问题的注释。 我只需要考虑列中的1s和后缀T1/T2等,以及相应的问题在列1问题、列2问题等。 现在,我想分别计算第1列、第2列和第1列、第2列中与第1列、第2列中的1相对应的1的数量,以及第1列、第2列中的唯一注释,并按以下格式获取

column_labels     count   issue1     issue2
column1_issues     3      comment1   commen2
column2_issues     2      comment3
column_labels     count   issue1     issue2
column1_issues     3      comment1   commen2
column2_issues     2      comment3
我试过groupby和crosstab,但没能得到

df3=df.groupby(['column1_T1', 'column1_issues'])['column1_T1'].count().unstack().fillna(0)

df3['Total'] =df3.loc[[1]].sum(axis=1)

但这远远不是我想要的。我真的被困在这里了

我希望我的最终数据帧采用上面提到的以下格式 按以下格式

column_labels     count   issue1     issue2
column1_issues     3      comment1   commen2
column2_issues     2      comment3
column_labels     count   issue1     issue2
column1_issues     3      comment1   commen2
column2_issues     2      comment3

第一个过滤器针对
1
值为每组筛选第一列,针对2列
数据帧获取第二列:

df1 = pd.concat([x.iloc[x.iloc[:, 0].values == 1,1].to_frame('issues').assign(lab=x.columns[1])
               for i, x in df.groupby(lambda x: x.split('_')[0], axis=1)], ignore_index=True)
print (df1)
     issues             lab
0  Comment1  column1_issues
1  Comment2  column1_issues
2  Comment1  column1_issues
3  Comment3  column2_issues
4  Comment3  column2_issues
然后删除重复项、添加辅助列依据和重塑依据、最后一次使用计数列依据: