Python 使用Panda构建非均匀行数矩阵

Python 使用Panda构建非均匀行数矩阵,python,pandas,Python,Pandas,道歉,如果标题不是真正的信息,有困难的时间来制定它 我有一些数据,在使用size()按摩后,按计数排序,我得到的战术和技术计数如下: tactic technique Defense Evasion A 2 B 2 C 1 Machine Learning D 496

道歉,如果标题不是真正的信息,有困难的时间来制定它

我有一些数据,在使用size()按摩后,按计数排序,我得到的战术和技术计数如下:

tactic            technique      
Defense Evasion   A                2
                  B                2
                  C                1
Machine Learning  D               496
                  E                1
我想将其转换为2个数据帧,其中一个具有以下策略:

Defense Evasion    Machine Learning
A                         D
B                         E
C
另一个是计数,我将应用一些热图着色:

Defense Evasion    Machine Learning
2                         496
2                          1
1

任何帮助都将不胜感激。

您可以使用
.index.get_level_值(0)
获取第一个索引级别值。然后循环遍历唯一值以获得下一级值和列值

d1={}
d2={}
对于s.index.get_level_值(0.unique)中的索引:
d1[index]=s.loc[index].index.tolist()
d2[index]=s.loc[index]。重置索引(drop=True)
df1=pd.DataFrame.from_dict(d1,orient='index').T
df2=局部数据帧(d2)
您可以对第一个数据帧使用
drop()
reset_index()
pivot()
apply()
sorted()
dropna()
方法:

df1=df.drop(columns=['technique']).reset_index().pivot(columns='level_0',values='tactic').apply(lambda x : sorted(x,key=pd.isnull)).dropna(subset=['Defense Evasion'])
最后:

df1.columns.name=''
df2.columns.name=''
现在,如果您打印
df1
,您将获得:

    Defense Evasion     Machine Learning
0   A                   D
1   B                   E
2   C                   NaN
    Defense Evasion     Machine Learning
0   2.0                 496.0
1   2.0                 1.0
2   1.0                 NaN
现在,对于第二个数据帧,您可以使用
droplevel()
reset\u index()
pivot()
apply()
sorted()
dropna()
方法:

df2=df.droplevel(1).reset_index().pivot(columns='index',values='technique').apply(lambda x : sorted(x,key=pd.isnull)).dropna(subset=['Defense Evasion'])
最后:

df1.columns.name=''
df2.columns.name=''
现在,如果您打印
df2
,您将获得:

    Defense Evasion     Machine Learning
0   A                   D
1   B                   E
2   C                   NaN
    Defense Evasion     Machine Learning
0   2.0                 496.0
1   2.0                 1.0
2   1.0                 NaN