如何使用文件中的值填充数据框
How to fill in a dataframe with values from file
我创建了一个包含列名和行的数据框。例如
a b c d
1 Nan Nan Nan Nan
2 Nan Nan Nan Nan
3 Nan Nan Nan Nan
现在,我想用 tsv 文件中的值填充数据框。我的文件如下:
1 b 80
2 c 90
3 a 60
创建这个
a b c d
1 Nan 80 Nan Nan
2 Nan Nan 90 Nan
3 60 Nan Nan Nan
我可以使用 pandas 用我文件中的值填充数据框吗?因此,我希望 python 查找正确的行和列并将我的值放在那里。提前致谢!
df1 = pd.DataFrame(index=[1,2,3], columns=list('abcd'))
print (df1)
a b c d
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
print (df2)
A B C
0 1 b 80
1 2 c 90
2 3 a 60
df = df2.pivot(index='A', columns='B', values='C') \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 80.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN
unstack
的替代解决方案:
df = df2.set_index(['A','B'])['C'].unstack() \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 80.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN
如果 A
和 B
中有重复项,请将 pivot_table
与某些聚合函数一起使用,例如 mean
:
print (df2)
A B C
0 1 b 80 <-duplicates for same A, B
1 1 b 100 <-duplicates for same A, B
2 2 c 90
3 3 a 60
df = df2.pivot_table(index='A', columns='B', values='C', aggfunc='mean') \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 90.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN
df = df2.groupby(['A','B'])['C'].mean().unstack() \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 90.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN
我创建了一个包含列名和行的数据框。例如
a b c d
1 Nan Nan Nan Nan
2 Nan Nan Nan Nan
3 Nan Nan Nan Nan
现在,我想用 tsv 文件中的值填充数据框。我的文件如下:
1 b 80
2 c 90
3 a 60
创建这个
a b c d
1 Nan 80 Nan Nan
2 Nan Nan 90 Nan
3 60 Nan Nan Nan
我可以使用 pandas 用我文件中的值填充数据框吗?因此,我希望 python 查找正确的行和列并将我的值放在那里。提前致谢!
df1 = pd.DataFrame(index=[1,2,3], columns=list('abcd'))
print (df1)
a b c d
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
print (df2)
A B C
0 1 b 80
1 2 c 90
2 3 a 60
df = df2.pivot(index='A', columns='B', values='C') \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 80.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN
unstack
的替代解决方案:
df = df2.set_index(['A','B'])['C'].unstack() \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 80.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN
如果 A
和 B
中有重复项,请将 pivot_table
与某些聚合函数一起使用,例如 mean
:
print (df2)
A B C
0 1 b 80 <-duplicates for same A, B
1 1 b 100 <-duplicates for same A, B
2 2 c 90
3 3 a 60
df = df2.pivot_table(index='A', columns='B', values='C', aggfunc='mean') \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 90.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN
df = df2.groupby(['A','B'])['C'].mean().unstack() \
.reindex(index=df1.index, columns= df1.columns)
print (df)
a b c d
1 NaN 90.0 NaN NaN
2 NaN NaN 90.0 NaN
3 60.0 NaN NaN NaN