我有一个包含两列的数据集,我想对特定列进行一些操作并完全获得一个新的数据帧。将此视为我的数据集:
<DocumentViewer>
<DocumentViewer.Resources>
<!-- Toolbar -->
<Style TargetType="ToolBar">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
<!-- Search -->
<Style TargetType="ContentControl">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</DocumentViewer.Resources>
</DocumentViewer>
我想在B列上执行两个操作,并创建一个包含这两列的数据帧。第1列将是1的最高数字,即108减去其最小值 - 1(108 - 1),2 - (89 - 23),如果它是单个实例,它应该直接为0.第二列将是特定的数字,假设它被A减去了第一个值,即(125 - 1),(125 - 23),(125 - 13)......我们应该得到这样的结果:
A B
1 01
1 56
1 89
1 108
2 23
2 36
2 89
3 13
4 45
我正在考虑使用.loc来查找值的具体位置然后减去它,我应该怎么做?
答案 0 :(得分:3)
使用first
的{{3}}和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
是必要的,因为agg
。
另一种解决方案:
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
答案 1 :(得分:0)
u = df.groupby('A').agg(['max', 'min', 'first'])
u.columns = 'max', 'min', 'first'
u['C'] = u['max'] - u['min']
u['D'] = 125 - u['first']
del u['min']
del u['max']
del u['first']
u.reset_index()
# A C D
#0 1 107 124
#1 2 66 102
#2 3 0 112
#3 4 0 80
答案 2 :(得分:0)
你可以
In [1494]: df.groupby('A', as_index=False).B.agg(
{'C': lambda x: x.max() - x.min(), 'D': lambda x: 125-x.iloc[0]})
Out[1494]:
A C D
0 1 107 124
1 2 66 102
2 3 0 112
3 4 0 80