pandas dataframe填充没有数据的值

w8f9ii69  于 2022-12-28  发布在  其他
关注(0)|答案(2)|浏览(125)

我有一个数据如下。
我需要填写“值”列,其中没有每个月/名称的数据。
月份值是df ['month']的唯一值

import pandas as pd

a = [['2020-01',1,'a'], ['2020-02',2,'a']]
b = [['2020-01',1,'b'], ['2020-03',4,'b']]
a.extend(b)

df = pd.DataFrame(a, columns=['month','value','name'])
print(df)

以下是原始数据。

month  value name
0  2020-01      1    a
1  2020-02      2    a
2  2020-01      1    b
3  2020-03      4    b

下面是填写零(0)时的预期结果。请注意,名称a和b都缺少月份。

month  value name
0  2020-01      1    a
1  2020-02      2    a
2  2020-03      0    a
3  2020-01      1    b
4  2020-02      0    b
5  2020-03      4    b

最有效的方法是什么?

1zmg4dgp

1zmg4dgp1#

让我们执行pivotstack来填充名称中的所有唯一月份:

df.pivot('name', 'month', 'value').fillna(0).stack().reset_index(name='value')
name    month  value
0    a  2020-01    1.0
1    a  2020-02    2.0
2    a  2020-03    0.0
3    b  2020-01    1.0
4    b  2020-02    0.0
5    b  2020-03    4.0
tpgth1q7

tpgth1q72#

我已经做了下面这样的。但我认为这是没有效率的。
如果有人能展示更高效的代码,我将不胜感激。

months = df['month'].unique().tolist()
names = df['name'].unique().tolist()
for name in names:
    df_name = df[df['name'] == name]
    months_name = df_name['month'].unique().tolist()
    months_2_fill = util.set_difference(months, months_name)

    df_ = pd.DataFrame(months_2_fill, columns=['month'])
    df_['name'] = name
    df_['value'] = 0

    df = df.append(df_)

相关问题