[英]Python Pandas - Merging two Dataframes with new and old rows
我有两个数据框,它们的行具有相同的(对应的)索引,我要合并这些索引。 每行都有一个更新时间。 对于索引相同的行,更新时间较长的行将获胜。 应该使用“较新”行中的所有字段,除了仅“较旧”行中的字段是值。 例:
df1 = pd.DataFrame({'Hugo' : {'age' : 21, 'weight' : 75},
'Niklas': {'age' : 46, 'weight' : 65},
'Ronald' : {'age' : 76, 'weight' : 85, 'height' : 176}}).T
df1.index.names = ['name']
df1['update_time'] = 1
df2 = pd.DataFrame({'Hugo' : {'age' : 22, 'weight' : 77},
'Bertram': {'age' : 45, 'weight' : 65, 'height' : 190},
'Donald' : {'age' : 75, 'weight' : 85},
'Ronald' : {'age' : 77, 'weight' : 84}}).T
df2.index.names = ['name']
df2['update_time'] = 2
df1:
+--------+-------+----------+----------+---------------+
| name | age | height | weight | update_time |
|--------+-------+----------+----------+---------------|
| Hugo | 21 | nan | 75 | 1 |
| Niklas | 46 | nan | 65 | 1 |
| Ronald | 76 | 176 | 85 | 1 |
+--------+-------+----------+----------+---------------+
df2:
+---------+-------+----------+---------------+
| name | age | weight | update_time |
|---------+-------+----------+---------------|
| Bertram | 45 | 65 | 2 |
| Donald | 75 | 85 | 2 |
| Hugo | 22 | 77 | 2 |
| Ronald | 77 | 84 | 2 |
+---------+-------+----------+---------------+
结果应如下所示:
+---------+-------+----------+----------+---------------+
| name | age | height | weight | update_time |
|---------+-------+----------+----------+---------------|
| Niklas | 46 | nan | 65 | 1 |
| Bertram | 45 | 190 | 65 | 2 |
| Donald | 75 | nan | 85 | 2 |
| Hugo | 22 | nan | 77 | 2 |
| Ronald | 77 | 176 | 84 | 2 |
+---------+-------+----------+----------+---------------+
我该怎么办? 问题是要保持Ronald的高度。 如果我先做df1的df.Update,那么时间戳就不存在了,而且我找不到较旧的副本。 如果我执行df.append,则无法合并字段。
使用combine_first
:
df2.combine_first(df1)
输出:
age height weight update_time
name
Bertram 45.0 190.0 65.0 2.0
Donald 75.0 NaN 85.0 2.0
Hugo 22.0 NaN 77.0 2.0
Niklas 46.0 NaN 65.0 1.0
Ronald 77.0 176.0 84.0 2.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.