【发布时间】:2019-07-18 19:18:19
【问题描述】:
我有以下数据集。 https://drive.google.com/drive/folders/1NRelNsXQJ7MTNKcm-T69N6r5ZsOyFmTS?usp=sharing
如果列名与工作表名相同,则合并在一起作为单独的列,以下是代码
import pandas as pd
import glob
import os
#file directory that contains the csv files
files = glob.glob('/Users/user/Desktop/demo/*.csv')
dfs = [pd.read_csv(fp).assign(SheetName=os.path.basename(fp).split('.')[0]) for fp in files]
data = pd.concat(dfs, ignore_index=True)
data.columns = data.columns.str.lower()
data=data.rename(columns={'sheetname':'Source'})
merged_data = data
运行上述代码后的数据
merged_data
id user product price[78] price[79] Source
105 dummya egg 22 28.0 sheet1
119 dummy1 soya 67 NaN sheet1
567 dummya spinach 22 28.0 sheet2
897 dummy1 rose 67 99.0 sheet2
345 dummya egg 87 98.0 sheet3
121 dummy1 potato 98 99.0 sheet3
如何按条件合并文件? 状况。
Sheet ID price1_col1 price1_col2 price1 price2_col1 price2_col2 price2 sheetname
sheet1 yes 78 price1_col1 78 price2_col1 yes
sheet2 yes 78 79 price1_col1+ 78 79 price2_col1+ yes
price1_col2 price2_col2
sheet3 yes 78 79 max(price1_col1, 79 78 min(price2_col1,price2_col2) no
price1_col2)
上面 sn-ps 上的 price 1 指向 sheet1 ,其列名包含 int 78 。 如果 78+79 表示对这些列求和,并将名称命名为 price1。
输出
id product price1 price2 sheetname
105 egg 22 28 sheet1
119 soya 67 sheet1
567 spinach 50 28 sheet2
897 rose 166 99 sheet2
345 egg 98 87
121 potato 99 98
【问题讨论】:
-
据我了解,您问的是如何聚合一些列,例如“SELECT 'sheet1' as sheet, 'yes' as ID, sum(price[78]) as price_1, sum(price[ 79]) as price_2, sheetname FROM source WHERE sheetname='sheet1' GROUP BY sheetname UNION ALL SELECT 'sheet2' as sheet, 'yes' as ID, sum(price[78]+price[79]) as price_1, price[ 78] 作为 price_2,sheetname FROM source WHERE ... -- 这是大致的意图吗?
-
@Sno 是的,我问了类似的问题
-
在您的条件第 3 行中,77 在哪里?
-
如果
ID是no会发生什么? -
例如第一个yes改成no了?