【问题标题】:Extracting values in one csv column based on the value of another根据另一列的值提取一个csv列中的值
【发布时间】:2019-09-30 12:34:09
【问题描述】:

我有一个要从中提取数据的 .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 的所有行,而不仅仅是时间值非零的行。

【问题讨论】:

  • 您能否澄清以下内容:输出是否应该是包含timebanana 列的DataFrame?还是应该输出一个 DataFrame,其中 time 值是列名,banana 值在第一行?
  • 对不够清晰深表歉意。我希望列名是时间。我希望香蕉数据与 csv 在 df['path'] 中的路径位于同一行。

标签: python pandas csv dataframe


【解决方案1】:

假设您有一个名为 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')

希望有帮助!

【讨论】:

  • 优秀的答案。
猜你喜欢
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 2023-02-18
  • 2016-02-11
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
相关资源
最近更新 更多