gpt4 book ai didi

python - Pandas 枢轴 : how to keep rows with all NaNs without introducing extra rows

转载 作者:行者123 更新时间:2023-12-03 18:47:45 34 4
gpt4 key购买 nike

我想为我正在使用的一些指标创建一个支点。但是,在某些情况下,对于特定年份,没有任何指标存在值。
这会导致该行消失。我想在制作枢轴时保留这一行,但也要保留任何额外的列。然而,这似乎会导致 dropna=False 出现问题。参数,其中正在创建额外的行。下面的例子:

import numpy as np
import pandas as pd
df = pd.DataFrame({"country":["a", "a", "a", "a", "b", "b", "b", "b"],
"metric": ["M1", "M2", "M1", "M2", "M1", "M2", "M1", "M2",],
"year": [2000, 2000, 2001, 2001, 2000, 2000, 2001, 2001, ],
"extra_val": ["a_val", "a_val", "a_val", "a_val", "b_val", "b_val", "b_val", "b_val"],
"metric_val": [1, 2, 3, 4, np.nan, np.nan, 7, 8],
})

out1 = df.pivot_table("metric_val", index=["country", "year", "extra_val"], columns="metric")
print(out1)
输出 1:对于国家 b,对于 2000 年,该行消失了,因为它都是 NaN。
metric                   M1   M2
country year extra_val
a 2000 a_val 1.0 2.0
2001 a_val 3.0 4.0
b 2001 b_val 7.0 8.0
现在,
out2 = df.pivot_table("metric_val", index=["country", "year", "extra_val"], columns="metric", dropna=False)
print(out2)
输出 2:这里是 extra_val列似乎被视为一个新级别,并且正在创建带有 NaN 的额外行。我想保留此列而没有这些额外的行(该列保证具有到国家/地区的 1 对 1 映射)
metric                   M1   M2
country year extra_val
a 2000 a_val 1.0 2.0
b_val NaN NaN
2001 a_val 3.0 4.0
b_val NaN NaN
b 2000 a_val NaN NaN
b_val NaN NaN
2001 a_val NaN NaN
b_val 7.0 8.0
我想要的是什么,
desired = out2.iloc[[0, 2, 5, 7]]
print(desired)
详细说明所需的输出:这就是我希望输出的样子(索引是硬编码的以进行演示,我无法对实际数据中的索引进行硬编码。)
metric                   M1   M2
country year extra_val
a 2000 a_val 1.0 2.0
2001 a_val 3.0 4.0
b 2000 b_val NaN NaN
2001 b_val 7.0 8.0
我如何获得这个输出?

最佳答案

Pivot(几乎)等同于 set_index().unstack() :

(df.set_index(['country','metric','year','extra_val'])
['metric_val'].unstack('metric')
)
输出:
metric                   M1   M2
country year extra_val
a 2000 a_val 1.0 2.0
2001 a_val 3.0 4.0
b 2000 b_val NaN NaN
2001 b_val 7.0 8.0

关于python - Pandas 枢轴 : how to keep rows with all NaNs without introducing extra rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67587041/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com