Python Pandas -查找缺失的行,然后复制修改后的另一行



拥有一个数据源,其中每行由两列唯一定义。但是,缺少一些行,需要用来自数据框的一些信息插入这些行。

所以在下面的表格中,当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

最新更新