我有一个包含两列的数据集,我想对一个特定的列做一些操作,并获得一个新的数据框。将此视为我的数据集:

A   B
1   01
1   56
1   89
1   108
2   23
2   36
2   89
3   13
4   45


我想对B列执行两项操作,并使用这2列创建一个数据框。第一列将是1的最高数字,即-108减去其最小值-1(108-1),对于2-(89-23),如果是单个实例,则应直接为0。第二列将是特定数字数字,假设它是A中值的第一个实例减去125,即(125-1),(125-23),(125-13)...我们应该得到这样的内容:

A   C     D
1   107  124
2   66   102
3   0    112
4   0    80


我当时在考虑使用.loc查找值的特定位置,然后减去它,该怎么办?

最佳答案

通过agg使用first并将lambda用作自定义函数,然后重命名列并使用125减去D

df = df.groupby('A')['B'].agg([lambda x: x.max() - x.min(), 'first']) \
                         .rename(columns={'first':'D','<lambda>':'C'}) \
                         .assign(D= lambda x: 125 - x['D']) \
                         .reset_index()
print (df)
   A    C    D
0  1  107  124
1  2   66  102
2  3    0  112
3  4    0   80

rename是必需的,因为deprecate groupby agg with a dictionary when renaming
另一个解决方案:
df = df.groupby('A')['B'].agg(['min','max', 'first']) \
                         .rename(columns={'first':'D','min':'C'}) \
                         .assign(D=lambda x: 125 - x['D'], C=lambda x: x['max'] - x['C']) \
                         .drop('max', axis=1) \
                         .reset_index()
print (df)
   A    C    D
0  1  107  124
1  2   66  102
2  3    0  112
3  4    0   80

关于python - 在特定条件下从列中减去值并获取新的DataFrame,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46031951/

10-12 22:26