根据另一个csv列中的值提取值

时间:2019-09-30 12:34:09

标签: python pandas csv dataframe

我有一个要从中提取数据的.csv文件。该文件有四列['time', 'apple', 'banana', 'orange']

这些列各有100行。我希望从香蕉列中提取数据,并将其插入数据框,条件是时间列中的值不为零。注意:在时间t之后,时间列中的值会返回零,并且我不希望提取这些行。

我想提取时间列,并将其用作数据框中的列名,然后将香蕉值作为数据框中的一行。

我希望将其放入数据帧的原因是我有几个希望从中提取数据的.csv文件。我有一个已经由一列组成的数据框,该列包含每个.csvs

的路径

我用来提取香蕉栏的代码是:

for i, p in enumerate(df['path']):
    if re.match(r".*\.L.*", p):
        df = pd.read_csv(p, index_col=False, sep='\s+|\t+|\s+\t+|\t+\s+', comment='#', names=['time', 'apple', 'banana',  'orange',  'pear'], usecols=[1])
        df.iloc[i, 3:] = df['apple'].values

但是,这并没有提供我希望的列名,并且将提取csv的所有行,不仅是时间值非零的行。

1 个答案:

答案 0 :(得分:2)

假设您的数据框名为df。您可以选择想要的特定行;

sub_df = df[['time', 'banana']][df['time'] > 0]

其中['time', 'banana']是您要选择的数据帧中的行的列表,而df['time'] > 0是仅用于使用时间大于零的行的过滤器。

然后您可以像旋转它一样

df_pivot = sub_df.pivot(columns='time', values='banana')

在这里,您将时间列及其值设为香蕉。

您也可以像这样

df_pivot = df[['time', 'banana']][df['time'] > 0].pivot(columns='time', values='banana')

希望有帮助!