Python 更新现有数据帧列
我有一个数据框,它的结构如下Python 更新现有数据帧列,python,python-2.7,pandas,dataframe,Python,Python 2.7,Pandas,Dataframe,我有一个数据框,它的结构如下 code value 1 red 2 blue 3 yellow 1 4 4 pink 2 blue 基本上,我想更新值列,以便空白行填充其他行的值。所以我知道代码4引用了值pink,我希望它在不存在该值的所有行中都被更新 您可以创建一系列代码-值对,并使用它们映射: 为了查看正在发生的情况,您将以下系列传递给map: 所以它说:在你找到1的地
code value
1 red
2 blue
3 yellow
1
4
4 pink
2 blue
基本上,我想更新值列,以便空白行填充其他行的值。所以我知道代码4引用了值pink,我希望它在不存在该值的所有行中都被更新 您可以创建一系列代码-值对,并使用它们映射: 为了查看正在发生的情况,您将以下系列传递给map: 所以它说:在你找到1的地方,给值红色,在你找到2的地方,给值蓝色…使用groupby和ffill以及bfill 您可以对\u值、ffill进行排序,然后对\u索引进行排序。如果顺序不重要,可能不需要最后一步。如果是这样的话,那么双重分类可能会非常昂贵
df = df.sort_values(['code', 'value']).ffill().sort_index()
print(df)
code value
0 1 red
1 2 blue
2 3 yellow
3 1 red
4 4 pink
5 4 pink
6 2 blue
您可以使用给定代码组的第一个值
发还
In [380]: df.assign(value=df.groupby('code')['value'].transform('first'))
Out[380]:
code value
0 1 red
1 2 blue
2 3 yellow
3 1 red
4 4 pink
5 4 pink
6 2 blue
或
使用reindex
df.dropna.set_index'code'['value']的可能重复也可以。df.dropna.set_index'code'['value']。删除重复项,因为在传递到时仍然必须确保没有重复的索引map@sacul您可以使用to_dict删除重复项并使用字典进行映射。我仍然得到其中一个代码-值对的2行,其中一个值为空,另一个值为正确值。有没有办法检查该字段是否有空字段?这是在my_Map中,您可以尝试从df.replace{:pd.np.nan',:pd.np.nan},inplace=True开始,从startOne事件中删除这些案例。。df.groupby'code'.value.applylambda x:x.ffill.bfillNvm忽略最后一条评论,我想你可能是对的,我需要测试一下。这是可行的,但有一个问题。代码4的第一个值为null,因此结果中代码为4的行的所有值列都更新为null。
df.groupby('code').value.ffill().bfill()
0 red
1 blue
2 yellow
3 red
4 pink
5 pink
6 blue
Name: value, dtype: object
df = df.sort_values(['code', 'value']).ffill().sort_index()
print(df)
code value
0 1 red
1 2 blue
2 3 yellow
3 1 red
4 4 pink
5 4 pink
6 2 blue
In [379]: df.groupby('code')['value'].transform('first')
Out[379]:
0 red
1 blue
2 yellow
3 red
4 pink
5 pink
6 blue
Name: value, dtype: object
In [380]: df.assign(value=df.groupby('code')['value'].transform('first'))
Out[380]:
code value
0 1 red
1 2 blue
2 3 yellow
3 1 red
4 4 pink
5 4 pink
6 2 blue
df['value'] = df.groupby('code')['value'].transform('first')
df.dropna().drop_duplicates('code').set_index('code').reindex(df.code).reset_index()
Out[410]:
code value
0 1 red
1 2 blue
2 3 yellow
3 1 red
4 4 pink
5 4 pink
6 2 blue