pandas - 从不同组中减去值

标签 pandas numpy

我有以下数据框:

    A   X
Time        
1   a   10
2   b   17
3   b   20
4   c   21
5   c   36
6   d   40

pd.DataFrame({'Time': [1, 2, 3, 4, 5, 6], 'A': ['a', 'b', 'b', 'c ', 'c', 'd'], 'X': [10, 17, 20, 21, 36, 40]}).set_index('时间')

期望的输出是:

Time    Difference
0   2   7
1   4   1
2   6   4

第一个差分 1 是从 20 中减去 21 的结果:(第一个 "c" 值- 最后一个 “b” 值)。

我也对 numPy 转换持开放态度。

最佳答案

GroupBy.agg 聚合与 GroupBy.first , GroupBy.last然后减去 last 列的移位值,并按位置省略第一行:

df = df.reset_index()
df1 = df.groupby('A',as_index=False, sort=False).agg(first=('X', 'first'),
                                                     last=('X','last'),
                                                     Time=('Time','first'))

df1['Difference'] = df1['first'].sub(df1['last'].shift(fill_value=0))

df1 = df1[['Time','Difference']].iloc[1:].reset_index(drop=True)
print (df1)
   Time  Difference
0     2           7
1     4           1
2     6           4

关于pandas - 从不同组中减去值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73825153/

相关文章:

python - 用于提取最后一个连字符之前的一定数量的字符的正则表达式

python - 在 Python 中绘制随机过程

python - 当列名包含 'XXX'时计算非空单元格的数量

python - 展平 Pandas Dataframes 中的列并引用原始资料

python - 如何在Python中按两列分组,计算加权平均值,返回DataFrame

python - 检查数据框中是否有未命名的列,然后在 Pandas 中返回指示

python - 确定数组 B 的每个元素在另一个数组 A 中的位置

python - 如何强制两个数组在 pyplot 中使用相等?

python - numpy,h5py : How do I make an array sorted by one of its columns from a bigger one saved with h5py?

python - 我可以将自己的 Python 类与 numpy 或其他一些矩阵库一起使用吗?