使用循环根据其他列行中的内容填充python中新列的行



我正在寻找在数据帧中填充新列内容的帮助。我需要New_column来根据其他列中的内容进行填充。

import pandas as pd
df = pd.read_csv('sample.txt')
# the data is imported as one column
df.columns = ['Test']
# split into columns
dfnew = df.Test.str.split(expand=True).rename(columns={0:'Datetime', 1:'P1', 2:'P2'})
# create a new column
dfnew["New_column"] = ""
print(dfnew)
Datetime     P1           P2        New_column
8             'Name-1'      None         None          
9    2017-01-01T00:00:00    2800         1600          
10   2017-02-01T00:00:00  -99999         2375            
..                   ...     ...          ...       ...
72            'Name-2'      None         None         
73   2018-10-11T00:00:00     0           2000          
74   2018-10-18T00:00:00     0           2000                  
..                   ...     ...          ...       ...
[724 rows x 4 columns]

在.txt文件中,当Datetime列中有Name-#值时,P1和P2行为空,但在打印df时,空格将替换为"None"。每x行,Datetime列中的Name-#就会发生变化(与名称相关联的数字不会以任何顺序增加(。我希望New_column用Datetime列中的Name-#填充每一行,直到下一个Name-#值替换它:

Datetime     P1           P2        New_column
8             'Name-1'       None         None          
9    2017-01-01T00:00:00     2800         1600          Name-1
10   2017-02-01T00:00:00   -99999         2375          Name-1
..                   ...     ...          ...       ...
72            'Name-2'       None         None         
73   2020-10-11T00:00:00      0           2000          Name-2
74   2020-10-18T00:00:00      0           2000          Name-2       
..                   ...     ...          ...       ...
623           'Name-14'      None         None         
624  2020-04-21T00:00:00   -99999         730           Name-14
625  2020-04-27T00:00:00      0           260           Name-14
..                   ...     ...          ...       ...
[724 rows x 4 columns]

我还想删除Datetime列中具有Name-#的行(即第8行、第72623.行等(。我需要自动执行此过程,以便导入相同样式但不一定大小相同或Name-#值相同的.txt文件。我曾尝试使用带有多个if语句的for循环创建一个列表,然后将New_column分配给该列表,但我似乎无法使其工作。。

我是Python的初学者,如果有任何帮助,我将不胜感激。

尝试下面的代码。首先,我们使用Datetime列创建一个新列。如果列值中包含"Name",则"new_col"的值将是DateTime列的值,否则它将是np.NaN(相当于NULL(。

如果值是np.nan.,那么我们使用ffinl((函数来正向填充new_col

import numpy as np
dfnew['new_col']=[x if 'Name' in str(x) else np.nan for x in  dfnew.Datetime.values ]
dfnew['new_col']=dfnew['new_col'].ffill()

[ffill((][1]

[1] :https://www.geeksforgeeks.org/python-pandas-dataframe-ffill/#:~:text=ffinll((%20函数%20已使用,传播%20最后%20有效%20观察%20转发&text=就地%20%3A%20If%20True%2C%20fill%20in,一个%20column%20in%20a%20DataFrame(。

相关内容

  • 没有找到相关文章

最新更新