Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更新现有数据帧列_Python_Python 2.7_Pandas_Dataframe - Fatal编程技术网

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