我有两个要合并的熊猫数据框。数据框的大小不同,因此我只希望保留出现在df1
中的那些数据框-一些学生仅出现在df1
或df2
之一中。
df1
的标题为['student', 'week1_count', 'week1_mean', ..., 'week11_count', 'week11_mean']
,并用'student'
列以外的所有单元格初始化为零。
df2
具有标题['student', 'week', 'count', 'mean']
,并填充有相应的'student'
。 'week'
是1到11之间的整数,'count'
和'mean'
是相应的浮点数。
我想做的是给df1
和df2
中的给定学生,在给定的一周内,取相应的'count'
和'mean'
值并放入df1
在相应列中。例如,'week'
的{{1}}值意味着1
中'count'
和'mean'
中的值将被放在df2
和{ {1}中的{1}}。
关于我已经遍历'week1_count'
并创建子数据集的几周时间,但想知道是否有更快的方法。
即
'week1_mean'
和
df1
所以是预期的结果
range(11)
我在熊猫中尝试了各种例程,但都没有按预期工作:
df1:
student week1_count week1_mean week2_count week2_mean ...
'0' 0 0 0 0 ...
'2' 0 0 0 0 ...
'3' 0 0 0 0 ...
.
.
.
'500' 0 0 0 0 ...
'541' 0 0 0 0 ...
'542' 0 0 0 0 ...
的格式,所以使用“ left”联接。我尝试重命名df2:
student week count mean
'0' 1 5 6.5
'1' 1 3 7.0
'2' 1 2 8.2
'2' 2 10 15.1
.
.
.
'500' 2 12 4.3
'540' 4 1 3.0
'542' 1 4 1.2
'542' 2 9 5.2
中的列以匹配列名。df_result:
student week1_count week1_mean week2_count week2_mean ...
'0' 5 6.5 0 0 ...
'2' 2 8.2 10 15.1 ...
'7' 0 0 0 0 ...
.
.
.
'500' 0 0 12 4.3 ...
'541' 0 0 0 0 ...
'542' 4 1.2 9 5.2 ...
中的所有单元格初始化为df1
而不是df2
,然后使用df1
(在np.nan
中重命名cols之后)以预期的方式更新所有nan值一个0.0
之类的东西,但同样不起作用答案 0 :(得分:1)
这更像是update
问题,而不是 merge
s=df2.pivot(index='student',columns='week',values=['count','mean'])# pivot df2 to format it to df1 like .
s.columns.map('week{0[1]}_{0[0]}'.format) # modify the column
Out[645]:
Index(['week1_count', 'week2_count', 'week4_count', 'week1_mean', 'week2_mean',
'week4_mean'],
dtype='object')
s.columns=s.columns.map('week{0[1]}_{0[0]}'.format)
然后我们做update
df1=df1.set_index('student')
df1=df1.update(s)