簡體   English   中英

子集pandas數據幀並保留原始大小

[英]Subsetting pandas dataframe and retain original size

我正在嘗試對數據幀進行子集化,但希望新數據幀具有相同大小的原始數據幀。
附加輸入,輸出和預期輸出。

df_input = pd.DataFrame([[1,2,3,4,5], [2,1,4,7,6], [5,6,3,7,0]], columns=["A", "B","C","D","E"])

df_output=pd.DataFrame(df_input.iloc[1:2,:])

df_expected_output=pd.DataFrame([[0,0,0,0,0], [2,1,4,7,6], [0,0,0,0,0]], columns=["A", "B","C","D","E"])  

請建議前進的方向。

使用reindex將子集回原點后設置reindex 這會將新行的所有值設置為NaN ,您可以通過fillna替換為0。 由於NaNfloa類型,因此您可以使用astype將所有內容轉換回int

 df_input.iloc[1:2,:].reindex(df_input.index).fillna(0).astype(int)

建立

df = pd.DataFrame([[1,2,3,4,5], [2,1,4,7,6], [5,6,3,7,0]], columns=["A", "B","C","D","E"])
output = df_input.iloc[1:2,:]

您可以創建一個mask並使用乘法:

m = df.index.isin(output.index)
m[:, None] * df

   A  B  C  D  E
0  0  0  0  0  0
1  2  1  4  7  6
2  0  0  0  0  0

我將使用where + between

df_input.where(df_input.index.to_series().between(1,1),other=0)
Out[611]: 
   A  B  C  D  E
0  0  0  0  0  0
1  2  1  4  7  6
2  0  0  0  0  0

還有一個選項是創建具有零值的DataFrame,然后使用df_input slice更新它

df_output = pd.DataFrame(0, index=df_input.index, columns = df_input.columns)
df_output.update(df_input.iloc[1:2,:])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM