python - 使用预定义列表分解行,同时保留现有行的值

标签 python pandas explode

我正在努力分解具有预定义列表的行,同时保留现有行的值。

我有一个像这样的数据框:

df = pd.DataFrame({'id': ['01','01','02'],
                    'color': ['red', 'yellow','yellow'],
                    'wave': ['1', '2', '2'],
                    'count':[1,2,1]})
print(df)
[output]
   id   color wave  count
0  01     red    1      1
1  01  yellow    2      2
2  02  yellow    2      1

我有两个列表:

ls_color = ['yellow', 'red', 'blue']
ls_wave = ['1','2']

我期望的数据框:

    id   color wave  count
0   01  yellow    1      0
1   01  yellow    2      2
2   01     red    1      1
3   01     red    2      0
4   01    blue    1      0
5   01    blue    2      0
6   02  yellow    1      0
7   02  yellow    2      1
8   02     red    1      0
9   02     red    2      0
10  02    blue    1      0
11  02    blue    2      0

最佳答案

from itertools import product
# create an expand of all combinations of color and wave
expand = list(product(df.id.unique(), ls_color, ls_wave))

expand
[('01', 'yellow', '1'), ('01', 'yellow', '2'), ('01', 'red', '1'), ('01', 'red', '2'), ('01', 'blue', '1'), ('01', 'blue', '2'), ('02', 'yellow', '1'), ('02', 'yellow', '2'), ('02', 'red', '1'), ('02', 'red', '2'), ('02', 'blue', '1'), ('02', 'blue', '2')]

# merge with original dataframe to add the count column
pd.DataFrame.from_records(expand, columns=['id', 'color', 'wave'])
  .merge(df, how='left').fillna(0)

    id   color wave  count
0   01  yellow    1    0.0
1   01  yellow    2    2.0
2   01     red    1    1.0
3   01     red    2    0.0
4   01    blue    1    0.0
5   01    blue    2    0.0
6   02  yellow    1    0.0
7   02  yellow    2    1.0
8   02     red    1    0.0
9   02     red    2    0.0
10  02    blue    1    0.0
11  02    blue    2    0.0

关于python - 使用预定义列表分解行,同时保留现有行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67654775/

相关文章:

python - 计算行级 Pandas 数据框中空单元格的数量并相应地创建一列

python - 在 Ubuntu 14.04 中添加 Python.h 和/或 python3-dev 的正确方法是什么?

python - Pandas 数据框中的分类变量?

python - Matplotlib 图没有出现

python - 如何在pandas中只返回一个group by?

php - 您如何使用值中的逗号EXPLODE CSV 行?

python - Django - 提交联系表单时出现 405 错误

python - Pandas :根据开始/结束日期聚合

php - explode 然后插入表

ios - 如何在 iOS 中过滤部分路径?