繁体   English   中英

pandas 根据列值迭代行

[英]pandas iterate over rows based on column values

我想同时计算城市之间的温差。 数据结构如下所示:

dic = {'city':['a','a','a','a','a','b','b','b','b','b'],'week':[1,2,3,4,5,3,4,5,6,7],'temp':[20,21,23,21,25,20,21,24,21,22]}
df = pd.DataFrame(dic)
df
+------+------+------+
| city | week | temp |
+------+------+------+
| a    |    1 |   20 |
| a    |    2 |   21 |
| a    |    3 |   23 |
| a    |    4 |   21 |
| a    |    5 |   25 |
| b    |    3 |   20 |
| b    |    4 |   21 |
| b    |    5 |   24 |
| b    |    6 |   21 |
| b    |    7 |   22 |
+------+------+------+

我想计算第 3、4 和 5 周 a 和 b 城市之间的温度差异。最终的数据结构应如下所示:

+--------+-------+------+------+
| city_1 | city2 | week | diff |
+--------+-------+------+------+
| a      | b     |    3 |    3 |
| a      | b     |    4 |    0 |
| a      | b     |    5 |    1 |
+--------+-------+------+------+

我会旋转你的数据,去掉 NA 值,然后直接做减法。 通过这种方式,您可以保持与每个城市相关的源温度。

result = (
    df.pivot(index='week', columns='city', values='temp')
      .dropna(how='any', axis='index')
      .assign(diff=lambda df: df['a'] - df['b'])  
)
print(result)
city     a     b  diff
week                  
3     23.0  20.0   3.0
4     21.0  21.0   0.0
5     25.0  24.0   1.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM