[英]complete the series(data frame) in python
我有這樣的數據集。 我想像輸出中描述的那樣填充這個數據框。 基本上缺失的系列值將填充為零
Date Opened Part Number NCe
0 2019-01-14 partA 1
1 2019-01-21 PartB 2
2 2019-01-21 PartC 1
3 2019-01-28 PartB 3
輸出:
Date Opened Part Number NCe
2019-01-14 partA 1
2019-01-14 PartB 0
2019-01-14 PartC 0
2019-01-21 PartA 0
2019-01-21 PartB 2
2019-01-21 PartC 1
2019-01-28 PartA 0
2019-01-28 PartB 3
2019-01-28 PartC 0
假設您已經在名為“df”的變量中定義了數據框,您可以在下面檢查是否有幫助:-
接下來,我只是按照骨架數據幀構成最終輸出的基礎的順序加入這些數據幀。 只需使用 .fillna() 用“0”填充 NaN 值。
dates = df.Date_Opened.unique().tolist()
parts = df.Part_Number.unique().tolist()
index = pd.MultiIndex.from_product([dates, parts], names = ["Date_Opened", "Part_Number"])
skeleton_df = pd.DataFrame(index = index).reset_index()
final_df = pd.merge(skeleton_df, df, on=['Date_Opened','Part_Number'], how ='left').fillna(0)
輸出
Date_Opened Part_Number NCe
0 2019-01-14 partA 1.0
1 2019-01-14 PartB 0.0
2 2019-01-14 PartC 0.0
3 2019-01-21 partA 0.0
4 2019-01-21 PartB 2.0
5 2019-01-21 PartC 1.0
6 2019-01-28 partA 0.0
7 2019-01-28 PartB 3.0
8 2019-01-28 PartC 0.0
注意:-肯定有更好的解決方法,我會發布更新,因為我可以測試另一個。
假設您的原始數據reset_index
是df
,您應該首先使用crosstab
和reset_index
來構建預期行的完整列表:
df2 = pd.DataFrame(pd.crosstab(df['Date Opened'], df['Part Number']
).stack()).reset_index()[['Date Opened', 'Part Number']]
它給:
Date Opened Part Number
0 2019-01-14 PartB
1 2019-01-14 PartC
2 2019-01-14 partA
3 2019-01-21 PartB
4 2019-01-21 PartC
5 2019-01-21 partA
6 2019-01-28 PartB
7 2019-01-28 PartC
8 2019-01-28 partA
它的排序不正確,因為小寫的p
在整理順序中排在大寫的P
之后。 您可以通過使用部件號的最后一個字符進行排序來修復它:
df2 = df2.assign(ix=df2['Part Number'].str[-1]).sort_values(['Date Opened', 'ix']
)[['Date Opened', 'Part Number']].reset_index(drop=True)
您現在可以合並原始值,用 0 填充缺失的值並轉換回 int:
df2.merge(df, how='left', on = ['Date Opened', 'Part Number']).fillna(0).astype({'NCe': int})
要得到:
Date Opened Part Number NCe
0 2019-01-14 partA 1
1 2019-01-14 PartB 0
2 2019-01-14 PartC 0
3 2019-01-21 partA 0
4 2019-01-21 PartB 2
5 2019-01-21 PartC 1
6 2019-01-28 partA 0
7 2019-01-28 PartB 3
8 2019-01-28 PartC 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.