我想根据b2-b5行找到c2-c5的值,并将其与数据框一起添加到行中。
这是我正在使用的示例数据。
.. 2 3 4 5 6 7 8
0 a b c d e f g
1 a1 b1 c1 d1 e1 f1 g1
2 a2 b2 c2 d2 e2 f2 g2
3 a3 b3 c3 d3 e3 f3 g3
4 a4 b4 c4 d4 e4 f4 g4
5 a5 b5 c5 d5 e5 f5 g5
我尝试的代码:随着值的替换,我必须将df.loc放到外面。
data=[]
for file in files:
df=pd.read_excel(file, header=None)
df['Year'] = file.split('_')[0]
df['Final'] = df.iat(1,1)
df['Comments'] = df.iat(2,1)
data.append(df)
df1 = df.loc[df[3].isin(['b2','b3','b4','b5']),[3,4]].assign(year=file.split('.')[0]).assign(df['Year]....)
我希望结果是这样的:
1 2 3 4 5 year
.
.
. . . abc def
. . . b2 c2 2019
. . . b3 c3 2019
b4 c4 2019
b5 c5 2019
b2 c2 2019
b3 c3 2019
b4 c4 2019
b5 c5 2019
答案 0 :(得分:0)
想法是按Series.isin
过滤所有值,并按DataFrame.assign
用year
添加新列append
和data
每个过滤的数据帧列出data=[]
for file in files:
df=pd.read_excel(file, header=None)
df = df.loc[df[3].isin(['b2','b3','b4','b5']),[3, 4]].assign(year=file.split('.')[0])
data.append(df)
df = pd.concat(data, ignore_index=True)
并最后使用{{ 3}}:
df = df.loc[df[3].isin(['b2','b3','b4','b5']),[3, 4]].assign(year=2019)
print (df)
3 4 year
2 b2 c2 2019
3 b3 c3 2019
4 b4 c4 2019
5 b5 c5 2019
使用示例数据进行测试:
ItemStreamReader
答案 1 :(得分:0)
如果我有不同的年份并想添加更多不同的列怎么办?
data=[]
for file in files:
df=pd.read_excel(file, header=None)
df['Year']= filename.split('_')
df = df.loc[df[3].isin(['b2','b3','b4','b5']),[3, 4]]
data.append(df)
df = pd.concat(data, ignore_index=True)