2017-10-12 71 views
0

我有如下数据框:最频繁的值熊猫更换行值数据框

|   types | freq |  TypeList 
0 | Q11424 (item) | 29 | Q11424 (item),Q571 (item) 
1 |  Q571 (item) | 9 | Q11424 (item),Q571 (item) 
0 | Q11012 (item) | 6 | Q11012 (item) 
0 | Q4830453 (item) | 39 | Q4830453 (item) 
0 | Q7725634 (item) | 2 | Q7725634 (item),Q571 (item) 
1 |  Q571 (item) | 9 | Q7725634 (item),Q571 (item) 
0 | Q785479 (item) | 1 | Q785479 (item),Q1344 (item) 
1 |  Q1344 (item) | 1 | Q785479 (item),Q1344 (item) 

列“类型”实际上是“类型串”的扁平列。 freq列表示列类型中每个值的频率。这些频率来自整个数据帧。在这里,我只是添加了几行这些行。例如。 Q571在类型列中出现了9次,因此freq = 9。 TypeList列是每个记录的类型列表。如果TypeList列包含多个类型,我想添加新的列SuperType,它将具有最常见的类型。例如。我想下面的结果:

|   types | freq |  TypeList     |SuperType 
0 | Q11424 (item) | 29 | Q11424 (item),Q571 (item) | Q11424 
1 |  Q571 (item) | 9 | Q11424 (item),Q571 (item) | Q11424 
0 | Q11012 (item) | 6 | Q11012 (item)    | Q11012 
0 | Q4830453 (item) | 39 | Q4830453 (item)    | Q4830453 
0 | Q7725634 (item) | 2 | Q7725634 (item),Q571 (item) | Q571 
1 |  Q571 (item) | 9 | Q7725634 (item),Q571 (item) | Q571 
0 | Q785479 (item) | 1 | Q785479 (item),Q1344 (item) | Q785479 
1 |  Q1344 (item) | 1 | Q785479 (item),Q1344 (item) | Q785479 

在第一行,TYPELIST列有值 “Q11424(项目),Q571(项目)”。所以我想检查这两种类型的频率,即29和9。并在该行的superType列中分配最频繁的类型,即在这种情况下为Q11424。

回答

1

通过使用transform

df['SuperType']=df.sort_values('freq').groupby('TypeList')['types'].transform('last') 
df['SuperType']=df.SuperType.str[:-6] 
df.sort_index() 
Out[1124]: 
      types freq      TypeList SuperType 
0 Q11424 (item) 29 Q11424 (item),Q571 (item) Q11424 
1  Q571 (item)  9 Q11424 (item),Q571 (item) Q11424 
2 Q11012 (item)  6    Q11012 (item) Q11012 
3 Q4830453 (item) 39    Q4830453 (item) Q4830453 
4 Q7725634 (item)  2 Q7725634 (item),Q571 (item)  Q571 
5  Q571 (item)  9 Q7725634 (item),Q571 (item)  Q571 
6 Q785479 (item)  1 Q785479 (item),Q1344 (item)  Q1344 
7  Q1344 (item)  1 Q785479 (item),Q1344 (item)  Q1344 

编辑:

df=df.sort_values('freq') 
df['SuperType']=df.groupby('TypeList')['types'].transform('last').values 
df['SuperType']=df.SuperType.str[:-6] 
+0

@ScottBoston编辑.. – Wen

+0

我得到 “ValueError异常:可以从重复轴不重新索引” 例外执行第一行后。只有当我尝试将值赋给df ['superType']时才会发生异常,否则它会起作用。 –

+0

@NilakshiNaphade尝试编辑 – Wen