查找规范化数据帧会删除用于分组的列,以便不能在后续的groupby操作中使用它。例如(编辑:更新):
df = pd.DataFrame({'a':[1, 1 , 2, 3, 2, 3], 'b':[0, 1, 2, 3, 4, 5]})
a b
0 1 0
1 1 1
2 2 2
3 3 3
4 2 4
5 3 5
df.groupby('a').transform(lambda x: x)
b
0 0
1 1
2 2
3 3
4 4
5 5
现在,对于群组中的大多数操作,“'缺失' column成为一个新索引(可以使用reset_index
进行调整,或者设置as_index=False
),但是当使用transform时它会消失,留下原始索引和没有键的新数据集。
编辑:这是我希望能够做到的一个方面
df.groupby('a').transform(lambda x: x+1).groupby('a').mean()
KeyError 'a'
在pandas docs的示例中,一个函数用于根据索引进行拆分,这似乎完全避免了这个问题。或者,总是可以在groupby / transform之后添加列,但肯定有更好的方法吗?
更新: 看起来reset_index / as_index仅适用于将每个组缩减为单个行的函数。似乎有几个选项,来自答案
答案 0 :(得分:2)
该问题也在here中进行了讨论。
返回的对象与原始df具有相同的索引,因此您可以这样做
Private Sub edit_Click(sender As Object, e As EventArgs) Handles edit.Click
If ComboBox3.SelectedItem = "vehicule" Then
Cn.Open()
cmdb = New SqlCommandBuilder(da)
da.Update(ds, "vehicule")
Cn.Close()
ElseIf ComboBox3.SelectedItem = "tissu" Then
Cn.Open()
cmdb = New SqlCommandBuilder(da1)
da1.Update(ds, "tissu")
Cn.Close()
ElseIf ComboBox3.SelectedItem = "projet" Then
Cn.Open()
cmdb = New SqlCommandBuilder(da2)
da2.Update(ds, "projet")
Cn.Close()
ElseIf ComboBox3.SelectedItem = "kit_cover" Then
Cn.Open()
cmdb = New SqlCommandBuilder(da3)
da3.Update(ds, "kit_cover")
Cn.Close()
ElseIf ComboBox3.SelectedItem = "plan coupe" Then
Cn.Open()
cmdb = New SqlCommandBuilder(da4)
da4.Update(ds, "plan de coupe")
Cn.Close()
End If
End Sub
答案 1 :(得分:1)
答案 2 :(得分:1)
另一种类似于Pepacz建议的方法:
df.loc[:, df.columns.drop('a')] = df.groupby('a').transform(lambda x: x)
答案 3 :(得分:0)
试试这个:
df['b'] = df.groupby('a').transform(lambda x: x)
df.drop_duplicates()