gpt4 book ai didi

python - pandas 或 python 相当于 tidyr complete

转载 作者:太空狗 更新时间:2023-10-29 21:33:32 26 4
gpt4 key购买 nike

我有这样的数据:

library("tidyverse")

df <- tibble(user = c(1, 1, 2, 3, 3, 3), x = c("a", "b", "a", "a", "c", "d"), y = 1)
df

# user x y
# 1 1 a 1
# 2 1 b 1
# 3 2 a 1
# 4 3 a 1
# 5 3 c 1
# 6 3 d 1

Python 格式:

import pandas as pd
df = pd.DataFrame({'user':[1, 1, 2, 3, 3, 3], 'x':['a', 'b', 'a', 'a', 'c', 'd'], 'y':1})

我想“完成”数据框,以便每个 user 都有一个记录每个可能的 x 和默认的 y填充设置为 0。

这在 R (tidyverse/tidyr) 中有点微不足道:

df %>% 
complete(nesting(user), x = c("a", "b", "c", "d"), fill = list(y = 0))

# user x y
# 1 1 a 1
# 2 1 b 1
# 3 1 c 0
# 4 1 d 0
# 5 2 a 1
# 6 2 b 0
# 7 2 c 0
# 8 2 d 0
# 9 3 a 1
# 10 3 b 0
# 11 3 c 1
# 12 3 d 1

在 pandas/python 中是否有一个 complete 等价物会产生相同的结果?

最佳答案

您可以使用 reindex通过 MultiIndex.from_product :

df = df.set_index(['user','x'])
mux = pd.MultiIndex.from_product([df.index.levels[0], df.index.levels[1]],names=['user','x'])
df = df.reindex(mux, fill_value=0).reset_index()
print (df)
user x y
0 1 a 1
1 1 b 1
2 1 c 0
3 1 d 0
4 2 a 1
5 2 b 0
6 2 c 0
7 2 d 0
8 3 a 1
9 3 b 0
10 3 c 1
11 3 d 1

set_index + stack + unstack :

df = df.set_index(['user','x'])['y'].unstack(fill_value=0).stack().reset_index(name='y')
print (df)
user x y
0 1 a 1
1 1 b 1
2 1 c 0
3 1 d 0
4 2 a 1
5 2 b 0
6 2 c 0
7 2 d 0
8 3 a 1
9 3 b 0
10 3 c 1
11 3 d 1

关于python - pandas 或 python 相当于 tidyr complete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44287445/

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