python - Pandas groupby 数据并进行计算

标签 python python-2.7 pandas

我有一个如下所示的数据框,我已根据 B 列的值对数据框重新排序。

a = df.sort(['B', 'A'], ascending=[True, False])

#This is my df    
A,B
a,2
b,3
c,4
d,5
d,6
d,7
d,9

然后当A列相同时,我想计算B列中每个元素之间的差异。但如果 A 列仅包含单个数据点,则结果将为零。

所以首先我使用 groupby() 来这样做。

b = a['B'].groupby(df['A']))

然后我卡在这里,我知道我可以使用 lambda x: abs(x[i] - x[i+1]) 甚至 apply() 函数来完成计算。但我还是没能完成。

谁能给我提示或建议?

# What I want to see in the result
A,B
a,0
b,0
c,0
d,0  # 5 minus 5
d,1  # 6 minus 5
d,1  # 7 minus 6
d,2  # 9 minus 7

最佳答案

在 1 成员和多成员组的情况下,采用 diff 将为第一个值生成一个 nan,我们可以用 0 fillna:

>>> df["B"] = df.groupby("A")["B"].diff().fillna(0)
>>> df
   A  B
0  a  0
1  b  0
2  c  0
3  d  0
4  d  1
5  d  1
6  d  2

这假设您要保留的地方已经没有 NaN。如果需要,我们仍然可以完成这项工作。

关于python - Pandas groupby 数据并进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35629694/

相关文章:

python - Pandas:查找 DF 中出现的频率

sorting - 重新排序由字典组成的列表的 Pythonic 方式是什么?

javascript - 在谷歌地图API中向多个标记添加标签

python - pycurl;连接后从代理收到 HTTP 代码 400

python-2.7 - 测试期间无法禁用WTF CSRF保护

android - 更新 Google Play 上的 apk 文件

python - 读取大 CSV 后跟 `.iloc` 切片列时出现 Pandas MemoryError

python - 将所需的行移动到 pandas Dataframe 的顶部

python - 获取 Python 3 字符串中的第二个单词

python - 给定一组在 (X, Y, Z) 坐标中定义的点,在任意 (X, Y) 处插入 Z 值