如何从具有多级列的数据帧中创建新的数据帧



我有这个数据帧,想创建各种其他数据帧,这些数据帧由Column State和其他列组成,这些列的减法将与减法结果和级别0列名一起进行。数据帧:

|状态|第1张|第2张|第3张|||计数|c|d|计数|c | d||:--------|:--------:|---|--:|:--------:|::::|:---------:||x | 100 | 23 | 34 | 50 | 4 | 56||:--------|:--------:|---|--:|:--------:|::::|:---------:||y | 300 | 13 | 34 | 60 | 41 | 32||:--------|:------:|---|--:|:-----:|:--:|:---------:|

所需的数据帧为:

|状态|Sheet1|Sheet2|差异|||计数|计数|||:--------|:--------:|--------:|:---------------:||x | 100 | 50 | 50||:--------|:--------:|--------:|:---------------:||y | 300 | 60 | 240||:--------|:--------:|--------:|:---------------:|

依此类推。

因此,要首先选择您想要的列,我们可以通过以下方式使用get_level_values

>> df = df.iloc[:, (df.columns.get_level_values(0) == "State") | (df.columns.get_level_values(1) == "count")]
>> df
State Sheet1 Sheet2
NaN  count  count
0     x    100     50
1     y    300     60

我们选择级别0等于"State"或级别1等于"count"的所有列。现在,您想要创建一个("Difference", None)列(没有级别1(。我们可以通过选择列并使用适当的格式来指定我们正在创建的列来实现这一点:

>> df[("Difference", None)] = df[("Sheet1", "count")] - df[("Sheet2", "count")]
>> df
State Sheet1 Sheet2 Difference
NaN  count  count        NaN
0     x    100     50         50
1     y    300     60        240

最新更新