使用Pandas构建非均匀行数矩阵

2024-05-13 18:52:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一些数据,在使用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

任何帮助都将不胜感激


Tags: 数据信息标题size排序时间machine技术
2条回答

您可以对第一个数据帧使用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=''

现在,如果您打印df1,您将获得:

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

现在,对于第二个数据帧,您可以使用droplevel()reset_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'])

最后:

df2.columns.name=''

现在,如果您打印df2,您将获得:

    Defense Evasion     Machine Learning
0   2.0                 496.0
1   2.0                 1.0
2   1.0                 NaN

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

d1 = {}
d2 = {}

for index in s.index.get_level_values(0).unique():
    d1[index] = s.loc[index].index.tolist()
    d2[index] = s.loc[index].reset_index(drop=True)

df1 = pd.DataFrame.from_dict(d1, orient='index').T
df2 = pd.DataFrame(d2)
print(df1)
  Defense Evasion Machine Learning
0               A                D
1               B                E
2               C             None

print(df2)
   Defense Evasion  Machine Learning
0                2             496.0
1                2               1.0
2                1               NaN

相关问题 更多 >