将剩余的聚合列作为列表在python pandas中按两列列出

时间:2018-01-16 14:40:42

标签: python python-2.7 pandas

我总共有5列,我希望在两列上分组,并希望获得列表中的其他列。我正在使用python pandas。 我在这里给出一个例子

   BN            PN        tempC tempF humidity
0  7363311        1         28    82       73
1  7363311        2         27    81       73
2  7363311        3         27    81       73
3  7363311        4         27    81       73
4  7363311        4         27    81       73
5  7363311        5         27    81       73
8  7363311        7         27    81       73
9  7363311        7         27    81       74

并且输出应该如下所示

  BN                  PN      tempC     tempF   humidity
   7363311            1         28        82       73
                      2         27        81       73
                      3         27        81       73
                      4         [27,27] [81,81]  [73,73]
                      5          27        81       73
                      7         [27,27] [81,81]  [73,74]

我使用下面的代码按其分组

df.groupby(['BN','PN'])

1 个答案:

答案 0 :(得分:2)

首先,必须汇总tuple,然后转换为list s:

df = df.groupby(['BN','PN']).agg(tuple).applymap(list)
print (df)
               tempC     tempF  humidity
BN      PN                              
7363311 1       [28]      [82]      [73]
        2       [27]      [81]      [73]
        3       [27]      [81]      [73]
        4   [27, 27]  [81, 81]  [73, 73]
        5       [27]      [81]      [73]
        7   [27, 27]  [81, 81]  [73, 74]

如果希望listscalar的组合添加if-else声明:

df = df.groupby(['BN','PN']).agg(tuple).applymap(lambda x: x[0] if len(x) == 1 else list(x))
print (df)
               tempC     tempF  humidity
BN      PN                              
7363311 1         28        82        73
        2         27        81        73
        3         27        81        73
        4   [27, 27]  [81, 81]  [73, 73]
        5         27        81        73
        7   [27, 27]  [81, 81]  [73, 74]