Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.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将递增地使用上述单元格的单元格值填充NaN_Python_Pandas_Dataframe_Nan - Fatal编程技术网

Python将递增地使用上述单元格的单元格值填充NaN

Python将递增地使用上述单元格的单元格值填充NaN,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,我有一个数据框架如下 Word Count Team Sex Code 0 develop 9 1 M P45.01 1 Effective 7 NaN M NaN 2 professional 8 NaN M NaN 3 approach 5 NaN M NaN 4 raster 34 NaN M

我有一个数据框架如下

           Word  Count  Team Sex    Code
0       develop      9   1     M  P45.01
1     Effective      7   NaN   M     NaN
2  professional      8   NaN   M     NaN
3      approach      5   NaN   M     NaN
4        raster     34   NaN   M     NaN
5           Sad     55   NaN   M     NaN
6         water      2   NaN   M     NaN
7          soil      7   NaN   M     NaN
8       farming      9   NaN   M     NaN
9          deep     12   NaN   M     NaN
我想用1,2,3,4,5。。。。以递增的方式对以下列代码执行相同操作:P45.01、P46.01、P47.01、P48.01。。。。请参阅下面的最终数据帧

注意:团队是数字,而代码是字符串列类型


我相信您可以创建范围并将其添加到第一个值中,以供性使用:

更一般的广播:

cols = ['Team','Code']
r = np.arange(len(df))
df[cols] = r[:, None] + df.loc[0, cols].values
df['Sex'] = df['Sex'].ffill()
print (df)
           Word  Count  Team Sex   Code
0       develop      9   1.0   M  45.01
1     Effective      7   2.0   M  46.01
2  professional      8   3.0   M  47.01
3      approach      5   4.0   M  48.01
4        raster     34   5.0   M  49.01
5           Sad     55   6.0   M  50.01
6         water      2   7.0   M  51.01
7          soil      7   8.0   M  52.01
8       farming      9   9.0   M  53.01
9          deep     12  10.0   M  54.01
编辑:

如果在float之前只有字符串,则可以将其提取到df1,添加范围和最后添加前缀:

r = np.arange(len(df))
df['Team'] = (df.loc[0, 'Team'] + r).astype(int)
df1 = df.loc[[0], 'Code'].str.extract('(\D+)(\d+\.\d+)', expand=False)
print (df1)
   0      1
0  P  45.01

df['Code'] = float(df1.loc[0, 1]) + r
df['Code'] = df1.loc[0, 0] + df['Code'].astype(str)
df['Sex'] = df['Sex'].ffill()
print (df)

           Word  Count  Team Sex    Code
0       develop      9     1   M  P45.01
1     Effective      7     2   M  P46.01
2  professional      8     3   M  P47.01
3      approach      5     4   M  P48.01
4        raster     34     5   M  P49.01
5           Sad     55     6   M  P50.01
6         water      2     7   M  P51.01
7          soil      7     8   M  P52.01
8       farming      9     9   M  P53.01
9          deep     12    10   M  P54.01
编辑:

错误似乎没有第一个索引值0,而是其他值。因此,可以使用iloc,通过位置进行选择:

r = np.arange(len(df))
df['Team'] = (df.iloc[0, df.columns.get_loc('Team')] + r).astype(int)
df1 = df.iloc[[0], df.columns.get_loc('Code')].str.extract('(\D+)(\d+\.\d+)', expand=False)

df['Code'] = float(df1.loc[0, 1]) + r
df['Code'] = df1.loc[0, 0] + df['Code'].astype(str)
df['Sex'] = df['Sex'].ffill()
print (df)

           Word  Count  Team Sex    Code
0       develop      9     1   M  P45.01
1     Effective      7     2   M  P46.01
2  professional      8     3   M  P47.01
3      approach      5     4   M  P48.01
4        raster     34     5   M  P49.01
5           Sad     55     6   M  P50.01
6         water      2     7   M  P51.01
7          soil      7     8   M  P52.01
8       farming      9     9   M  P53.01
9          deep     12    10   M  P54.01

我相信您可以创建范围并将其添加到第一个值中,以供性使用:

更一般的广播:

cols = ['Team','Code']
r = np.arange(len(df))
df[cols] = r[:, None] + df.loc[0, cols].values
df['Sex'] = df['Sex'].ffill()
print (df)
           Word  Count  Team Sex   Code
0       develop      9   1.0   M  45.01
1     Effective      7   2.0   M  46.01
2  professional      8   3.0   M  47.01
3      approach      5   4.0   M  48.01
4        raster     34   5.0   M  49.01
5           Sad     55   6.0   M  50.01
6         water      2   7.0   M  51.01
7          soil      7   8.0   M  52.01
8       farming      9   9.0   M  53.01
9          deep     12  10.0   M  54.01
编辑:

如果在float之前只有字符串,则可以将其提取到df1,添加范围和最后添加前缀:

r = np.arange(len(df))
df['Team'] = (df.loc[0, 'Team'] + r).astype(int)
df1 = df.loc[[0], 'Code'].str.extract('(\D+)(\d+\.\d+)', expand=False)
print (df1)
   0      1
0  P  45.01

df['Code'] = float(df1.loc[0, 1]) + r
df['Code'] = df1.loc[0, 0] + df['Code'].astype(str)
df['Sex'] = df['Sex'].ffill()
print (df)

           Word  Count  Team Sex    Code
0       develop      9     1   M  P45.01
1     Effective      7     2   M  P46.01
2  professional      8     3   M  P47.01
3      approach      5     4   M  P48.01
4        raster     34     5   M  P49.01
5           Sad     55     6   M  P50.01
6         water      2     7   M  P51.01
7          soil      7     8   M  P52.01
8       farming      9     9   M  P53.01
9          deep     12    10   M  P54.01
编辑:

错误似乎没有第一个索引值0,而是其他值。因此,可以使用iloc,通过位置进行选择:

r = np.arange(len(df))
df['Team'] = (df.iloc[0, df.columns.get_loc('Team')] + r).astype(int)
df1 = df.iloc[[0], df.columns.get_loc('Code')].str.extract('(\D+)(\d+\.\d+)', expand=False)

df['Code'] = float(df1.loc[0, 1]) + r
df['Code'] = df1.loc[0, 0] + df['Code'].astype(str)
df['Sex'] = df['Sex'].ffill()
print (df)

           Word  Count  Team Sex    Code
0       develop      9     1   M  P45.01
1     Effective      7     2   M  P46.01
2  professional      8     3   M  P47.01
3      approach      5     4   M  P48.01
4        raster     34     5   M  P49.01
5           Sad     55     6   M  P50.01
6         water      2     7   M  P51.01
7          soil      7     8   M  P52.01
8       farming      9     9   M  P53.01
9          deep     12    10   M  P54.01
这将与现有的1和2一起使用

或者最终

df=df.reset_index()
df['Team']=df.index+1
我还没有测试过,但它应该可以工作

这将与现有的1和2一起使用

或者最终

df=df.reset_index()
df['Team']=df.index+1

我还没有测试过它,但它应该可以工作

我意识到,考虑到这里更新的数据帧,您还可以执行以下操作之一:

安装程序
我们需要注意的一点是,发电机正在动态生成数字,只能使用一次;但它确实起到了作用。

我意识到,考虑到这里更新的数据帧,您还可以执行以下操作之一:

安装程序
我们需要注意的一点是,发电机正在动态生成数字,只能使用一次;但是它确实起到了作用。

啊,我只是用np.arange写的,很好的一个。我认为这不能很好地推广到多个列。而且,从第一行开始添加不是一个好主意,因为你不能保证它从第一行开始是连续的。此外,并非所有列都需要相同数量的NAN。@cᴏʟᴅsᴘᴇᴇᴅ - 是的,这取决于数据。如果需要其他内容,我会等待OP。@UmarYusuf-那么如果在浮点代码检查编辑的答案之前只差一些字符串。啊,我只是在用np.arange编写,很好。我认为这不会很好地推广到多个列。而且,从第一行添加不是一个好主意,因为您不能保证它从第一行开始是连续的。此外,并非所有列都需要相同数量的NAN。@cᴏʟᴅsᴘᴇᴇᴅ - 是的,这取决于数据。如果需要其他东西,我在等待OP。@UmarYusuf-那么如果在浮点代码检查编辑的答案之前只差一些字符串。总是有步骤1吗?或者应该是不同的?还有,在数字列中总是会有相同数量的N吗?@jezrael只是想知道你在这里把什么称为步骤1?@stucash-我想如果有时有不同的步骤,例如2,那么解决方案应该是不同的。@jezrael啊,我现在明白你的意思了,谢谢。总是有步骤1吗?或者应该是不同的?还有,在数字列中总是有相同数量的“N”吗?@jezrael只是想知道这里的第一步是什么?@stucash-我想如果有时有不同的步骤,例如2,那么解决方案应该是不同的。@jezrael啊,我现在明白你的意思了,谢谢。
import re

def count(n):
    x = 0
    while x < n:
        yield x
        x += 1

def populate(s, step):
    chars = re.split('(\d*)', s)
    number = int(chars[1]) + step
    chars[1] = str(number)
    return ''.join(chars)

number_generator = count(10)
number_generator2 = count(10)
# option 1 for `team` column
df['Team'] = df.index + 1 # just use your indices.

# option 2 for 'team' column
df.loc[:, 'Team'] = df.Team.apply(lambda _: next(number_generator)) # use generator.

# output

           Word  Count  Team Sex    Code
0       develop      9     1   M  P45.01
1     Effective      7     2   M     NaN
2  professional      8     3   M     NaN
3      approach      5     4   M     NaN
4        raster     34     5   M     NaN
5           Sad     55     6   M     NaN
6         water      2     7   M     NaN
7          soil      7     8   M     NaN
8       farming      9     9   M     NaN
9          deep     12    10   M     NaN

# we can use generator again for `Code` column
df.loc[:, 'Code']df.Code.apply(lambda _: populate(df.loc[0, 'Code'], next(number_generator2)))

# output 
           Word  Count  Team Sex    Code
0       develop      9     1   M  P45.01
1     Effective      7     2   M  P46.01
2  professional      8     3   M  P47.01
3      approach      5     4   M  P48.01
4        raster     34     5   M  P49.01
5           Sad     55     6   M  P50.01
6         water      2     7   M  P51.01
7          soil      7     8   M  P52.01
8       farming      9     9   M  P53.01
9          deep     12    10   M  P54.01