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