2016-12-05 63 views
2

我已经获得了来自不同天气机构的一些天气数据,并且我正在计算Pandas中的读数。我需要:在同一个标​​签/城市大熊猫统计每个索引的唯一值并将唯一行变为总计列

  1. 删除重复的读数
  2. 创建独特的读数数量
  3. 创建包含的(唯一的)读数计每个机构新列的新列该指数

当前数据结构:

City   Reading Agency 
NEW YORK  80  US 
NEW YORK  142  GB 
NEW YORK  200  GB 
NEW YORK  80  US 
TORONTO  96  US 
TORONTO  79  US 
TORONTO  83  US 
TORONTO  73  GB 
TORONTO  67  US 
TORONTO  67  US 

所需的输出:

City   Total US GB 
NEW YORK   3 1  2 
TORONTO   5 4  1 

我已经找到了一些方法来做到这一点,但它们令人难以置信的混乱。如果有人有一个优雅的解决方案,我会非常感激。

谢谢。

回答

1

您可以使用groupby与聚集nunique,然后通过unstack和最后insert新列Total通过sum重塑:

df = df.groupby(['City','Agency'])['Reading'].nunique().unstack(fill_value=0) 
df.insert(0, 'Total', df.sum(axis=1)) 
print (df) 
Agency Total GB US 
City     
NEW YORK  3 2 1 
TORONTO  5 1 4 
+0

真棒,谢谢。那很完美。比我提出的要好10倍。 – Shanks

+0

超级,顺便说一句,我第一次使用'插入'功能。 – jezrael

+0

当我在我的完整数据集上使用它时,我得到KeyError:'城市',它绝对是正确的关键... – Shanks