cur*_*kie 3 python dataframe pandas databricks
我有一个 pandas 数据框,如下所示:
指数 | 年 | 月 | 水果 | 数数 |
---|---|---|---|---|
0 | 2021年 | 03 | 苹果 | 2 |
1 | 2021年 | 03 | 橙子 | 3 |
2 | 2021年 | 03 | 芒果 | 4 |
3 | 2021年 | 04 | 苹果 | 1 |
4 | 2021年 | 04 | 芒果 | 2 |
5 | 2021年 | 05 | 苹果 | 1 |
假设苹果、橙子和芒果是我唯一感兴趣的水果。
数据框的形成方式是,如果水果的计数(一个月和一年)为 0,则它不会显示为记录。我想将缺失的水果行添加到计数列值 = 0 的数据框中。简而言之,我希望 3 个水果中的每一个都显示年份和月份,而不管计数是否为 0。所以我希望它看起来像这:
指数 | 年 | 月 | 水果 | 数数 |
---|---|---|---|---|
0 | 2021年 | 03 | 苹果 | 2 |
1 | 2021年 | 03 | 橙子 | 3 |
2 | 2021年 | 03 | 芒果 | 4 |
3 | 2021年 | 04 | 苹果 | 1 |
X | 2021年 | 04 | 橙子 | 0 |
4 | 2021年 | 04 | 芒果 | 2 |
5 | 2021年 | 05 | 苹果 | 1 |
X | 2021年 | 05 | 橙子 | 0 |
X | 2021年 | 05 | 芒果 | 0 |
感谢任何有关如何解决此问题的建议。
您可以使用pyjanitor
'scomplete
来填充缺失的行:
import io
import pandas as pd
import janitor
data = '''Index Year Month Fruit Count
0 2021 03 Apple 2
1 2021 03 Orange 3
2 2021 03 Mango 4
3 2021 04 Apple 1
4 2021 04 Mango 2
5 2021 05 Apple 1'''
df = pd.read_csv(io.StringIO(data), sep='\t', index_col='Index')
df = df.complete('Fruit', ['Year', 'Month']).fillna(0, downcast='infer').sort_values(['Year', 'Month', 'Fruit'])
Run Code Online (Sandbox Code Playgroud)
输出:
年 | 月 | 水果 | 数数 | |
---|---|---|---|---|
0 | 2021年 | 3 | 苹果 | 2 |
2 | 2021年 | 3 | 芒果 | 4 |
1 | 2021年 | 3 | 橙子 | 3 |
3 | 2021年 | 4 | 苹果 | 1 |
4 | 2021年 | 4 | 芒果 | 2 |
6 | 2021年 | 4 | 橙子 | 0 |
5 | 2021年 | 5 | 苹果 | 1 |
8 | 2021年 | 5 | 芒果 | 0 |
7 | 2021年 | 5 | 橙子 | 0 |