拥有一个数据源,其中每行由两列唯一定义。但是,缺少一些行,需要用来自数据框的一些信息插入这些行。
所以在下面的表格中,当A=2和B=20时,我们缺失了。
D
不确定这是否是您想要的-您可以使用pyjanitor中的完整函数来暴露缺失的组合;目前,您必须从github安装最新的开发版本:
# install latest dev version
# pip install git+https://github.com/ericmjl/pyjanitor.git
import janitor
df.complete(["A", "B"])
A B C
0 1 10 A
1 1 20 D
2 2 10 B
3 2 20 NaN
4 3 10 C
5 3 20 E
使用Pandas' only,我们可以为列'A'和'B"创建唯一的值,建立一个新的MultiIndex,然后重新索引数据框:
new_index = pd.MultiIndex.from_product([df.A.unique(), df.B.unique()],
names=["A", "B"])
new_index
MultiIndex([(1, 10),
(1, 20),
(2, 10),
(2, 20),
(3, 10),
(3, 20)],
names=['A', 'B'])
现在,设置索引,重新索引和重置索引:
df.set_index(["A", "B"]).reindex(new_index).reset_index()
A B C
0 1 10 A
1 1 20 D
2 2 10 B
3 2 20 NaN
4 3 10 C
5 3 20 E
也可以填充空值:
df.set_index(["A", "B"]).reindex(new_index, fill_value=0).reset_index()
完整的函数要求你传递一个字典(或者你可以直接使用fillna而不用担心字典):
df.complete(["A", "B"], fill_value={"C": 0}) # or df.complete(["A", "B"]).fillna(0)
A B C
0 1 10 A
1 1 20 D
2 2 10 B
3 2 20 0
4 3 10 C
5 3 20 E