gpt4 book ai didi

python - Df header : Insert a full year of header rows at end of month and fill non populated months with zero

转载 作者:行者123 更新时间:2023-12-01 07:50:13 24 4
gpt4 key购买 nike

下午好,

截至 2019 年 3 月 30 日的测试数据:

Test_Data = [
('Index', ['Year_Month','Done_RFQ','Not_Done_RFQ','Total_RFQ']),
('0', ['2019-01',10,20,30]),
('1', ['2019-02', 10, 20, 30]),
('2', ['2019-03', 20, 40, 60]),
]

df = pd.DataFrame(dict(Test_Data))
print(df)

Index 0 1 2
0 Year_Month 2019-01 2019-02 2019-03
1 Done_RFQ 10 10 20
2 Not_Done_RFQ 20 20 40
3 Total_RFQ 30 30 60

截至 2019 年 3 月 31 日的预期产出

enter image description here

截至 2019 年 4 月 30 日的预期产出

enter image description here

随着每个月的进行,未格式化的 df 将有一个额外的数据列

我愿意:

a.替换现有 df 中的标题,注意 3 月只有 4 列,4 月只有 5 列....12 月 13 日:

df.columns = ['Report_Mongo','Month_1','Month_2','Month_3','Month_4','Month_5','Month_6','Month_7','Month_8','Month_9','Month_10','Month_11','Month_12']

b.随着这一年的进展,零值将被数据取代。挑战在于确定已经过去了多少个月,并且仅用数据更新未填充的列

最佳答案

您可以按原始列的长度和 DataFrame.reindex 来分配列:

c = ['Report_Mongo','Month_1','Month_2','Month_3','Month_4','Month_5','Month_6',
'Month_7','Month_8','Month_9','Month_10','Month_11','Month_12']

df.columns = c[:len(df.columns)]
df = df.reindex(c, axis=1, fill_value=0)
print (df)
Report_Mongo Month_1 Month_2 Month_3 Month_4 Month_5 Month_6 \
0 Year_Month 2019-01 2019-02 2019-03 0 0 0
1 Done_RFQ 10 10 20 0 0 0
2 Not_Done_RFQ 20 20 40 0 0 0
3 Total_RFQ 30 30 60 0 0 0

Month_7 Month_8 Month_9 Month_10 Month_11 Month_12
0 0 0 0 0 0 0
1 0 0 0 0 0 0
2 0 0 0 0 0 0
3 0 0 0 0 0 0

替代方法是创建带有月份周期的标题,优点是所有行中只有数字数据:

#set columns by first row
df.columns = df.iloc[0]
#remove first row and create index by first column
df = df.iloc[1:].set_index('Year_Month')
#convert columns to month periods
df.columns = pd.to_datetime(df.columns).to_period('m')
#reindex to full year
df = df.reindex(pd.period_range(start='2019-01',end='2019-12',freq='m'),axis=1,fill_value=0)
print (df)
2019-01 2019-02 2019-03 2019-04 2019-05 2019-06 2019-07 \
Year_Month
Done_RFQ 10 10 20 0 0 0 0
Not_Done_RFQ 20 20 40 0 0 0 0
Total_RFQ 30 30 60 0 0 0 0

2019-08 2019-09 2019-10 2019-11 2019-12
Year_Month
Done_RFQ 0 0 0 0 0
Not_Done_RFQ 0 0 0 0 0
Total_RFQ 0 0 0 0 0

关于python - Df header : Insert a full year of header rows at end of month and fill non populated months with zero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56268220/

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