0
我剛開始使用熊貓,並且有一個數據框包含具有相同索引的多行,表示變量具有某些特徵,例如,熊貓:合併具有相同索引的行,同時創建一個新列
ItemID Property Numerical_value
A1 'Red' 10
A1 'Fruit' 0
B1 'Red' 25
C1 'Liquid' 0
對我的數據持有的假設是; 只有屬性爲「紅色」的行纔有數字值。並且 如果一個物品具有屬性'水果',它也具有屬性紅色。
我面臨的問題是將這個日期框架轉換爲每個itemID的單一編碼方案,同時也保存數值(如果存在的話)。
ItemID Red&Fruit Just_red Other Numerical_value
A1 1 0 0 10
B1 0 1 0 25
C1 0 0 1 0
目前,我寫了下面的代碼;
def read_report:
fp = 'file_path'
df = (pd.read_csv(fp))
group = df.groupby('ItemID')['Property','Numerical_value'].apply(test_function)
與
def test_function(df):
if 'Fruit' in df.values:
num_val = df[df['Property'] == 'Red']['Numerical_value'].values[0]
return pd.Series({'Red&Fruit': '1', 'Num_val': num_val})
elif 'Red' in df.values:
num_val= df[df['Property'] == 'Red']['Num_val'].values[0]
return pd.Series({'Just_red': '1', 'Num_val': num_val})
else:
return pd.Series({'Other': '1', 'Num_val': 0})
這似乎不是最佳的,尤其是得到的數值爲每概括行的感覺,而哈克的方式。
有沒有更好的方法來達到同樣的效果?
你的問題對我來說並不完全清楚:在第1組中,你有一個項目'紅色'和一個項目'水果',根據你所說的'紅色和水果'。這兩個不同的對象?或者任何時候有'水果',也會有'紅色'? – FLab
你最後的陳述是正確的,它是同一個對象。如果我們遇到屬性'水果',我們相信它也有屬性'紅'。 –