Python 熊猫:合并具有相同索引的行,同时创建新列
我刚开始使用Pandas,有一个数据框,包含多个具有相同索引的行,表示变量具有某些特性,例如Python 熊猫:合并具有相同索引的行,同时创建新列,python,pandas,Python,Pandas,我刚开始使用Pandas,有一个数据框,包含多个具有相同索引的行,表示变量具有某些特性,例如 ItemID Property Numerical_value A1 'Red' 10 A1 'Fruit' 0 B1 'Red' 25 C1 'Liquid' 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)
与
这似乎不是最优的,尤其是获取每个汇总行的数值的方法感觉相当粗糙
有没有更好的方法达到同样的效果?我建议按组获取属性集:
df.groupby('ItemID')['Property'].apply(set)
Out[15]:
ItemID
A1 {'Red', 'Fruit'}
B1 {'Red'}
C1 {'Liquid'}
然后,您可以使用get\u dummies
:
df.groupby('ItemID')['Property'].apply(set).str.get_dummies()
Out[17]:
{"'Liquid'"} {"'Red'", "'Fruit'"} {"'Red'"}
ItemID
A1 0 1 0
B1 0 0 1
C1 1 0 0
在您的示例中,您只需要重命名列。但是,您可能希望替换groupby
操作后的值
最后,与数值合并:
pd.concat([df.groupby('ItemID')['Property'].apply(set).str.get_dummies(),
df.groupby('ItemID')['Numerical_value'].first()], axis=1)
Out[21]:
{"'Liquid'"} {"'Red'", "'Fruit'"} {"'Red'"} Numerical_value
ItemID
A1 0 1 0 10
B1 0 0 1 25
C1 1 0 0 0
这里我采用第一个数值,如您的示例所示。我建议按组获取属性集:
df.groupby('ItemID')['Property'].apply(set)
Out[15]:
ItemID
A1 {'Red', 'Fruit'}
B1 {'Red'}
C1 {'Liquid'}
然后,您可以使用get\u dummies
:
df.groupby('ItemID')['Property'].apply(set).str.get_dummies()
Out[17]:
{"'Liquid'"} {"'Red'", "'Fruit'"} {"'Red'"}
ItemID
A1 0 1 0
B1 0 0 1
C1 1 0 0
在您的示例中,您只需要重命名列。但是,您可能希望替换groupby
操作后的值
最后,与数值合并:
pd.concat([df.groupby('ItemID')['Property'].apply(set).str.get_dummies(),
df.groupby('ItemID')['Numerical_value'].first()], axis=1)
Out[21]:
{"'Liquid'"} {"'Red'", "'Fruit'"} {"'Red'"} Numerical_value
ItemID
A1 0 1 0 10
B1 0 0 1 25
C1 1 0 0 0
这里我以第一个数值为例。您的问题对我来说并不完全清楚:根据您的说法,在第1组中,您有一个项目“红色”和一个项目“水果”,即“红色和水果”。这两个物体是不同的吗?或者任何时候有一个“水果”也会有一个“红色”?你的最后一句话是正确的,它是同一个对象。如果我们遇到“水果”属性,我们确信它也有“红色”属性。我不完全清楚您的问题:在第1组中,您有一个项目“红色”和一个项目“水果”,根据您的说法,这是“红色和水果”。这两个物体是不同的吗?或者任何时候有一个“水果”也会有一个“红色”?你的最后一句话是正确的,它是同一个对象。如果我们遇到“水果”属性,我们确信它也有“红色”属性。