我有一个包含两列的数据集,我想对一个特定的列做一些操作,并获得一个新的数据框。将此视为我的数据集:
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/