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
你最后的陈述是正确的,它是同一个对象。如果我们遇到属性'水果',我们相信它也有属性'红'。 –