在特定列上更新熊猫
Posted
技术标签:
【中文标题】在特定列上更新熊猫【英文标题】:Update in pandas on specific columns 【发布时间】:2016-03-26 11:41:49 【问题描述】:我想根据另一个数据帧中的值更新一个pandas
数据帧中的值,但我想指定要更新的列(即,哪一列应该是查找匹配行的“键”) .现在它似乎确实将第一列视为关键。有没有办法给它传递一个特定的列名?
例子:
import pandas as pd
import numpy as np
df_a = pd.DataFrame()
df_a['x'] = range(5)
df_a['y'] = range(4, -1, -1)
df_a['z'] = np.random.rand(5)
df_b = pd.DataFrame()
df_b['x'] = range(5)
df_b['y'] = range(5)
df_b['z'] = range(5)
print('df_b:')
print(df_b.head())
print('\nold df_a:')
print(df_a.head(10))
df_a.update(df_b)
print('\nnew df_a:')
print(df_a.head())
输出:
df_b:
x y z
0 0 0 0
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
old df_a:
x y z
0 0 4 0.333648
1 1 3 0.683656
2 2 2 0.605688
3 3 1 0.816556
4 4 0 0.360798
new df_a:
x y z
0 0 0 0
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
你看,它所做的是将df_a
中的y
和z
替换为df_b
中的相应列,基于x
在df_a
和df_b
之间的匹配。
如果我想保持y
不变怎么办?如果我希望它基于y
而不是x
替换怎么办。此外,如果有多个列我想进行替换(在真正的问题中,我必须使用新数据集更新数据集,其中两列或三列之间存在匹配项第四列的值)。
基本上,我想做某种合并-替换操作,在其中指定要合并/替换 on
的列以及应替换的列。
希望这能让事情更清楚。如果这不能用pandas
中的update
完成,我想知道是否还有另一种方法(没有为它编写一个带有for
循环的单独函数)。
【问题讨论】:
拜托,伙计,如果有人不知道你在做什么,你认为他们有足够的信息可以提供帮助吗? 添加了示例代码和输出。 【参考方案1】:这是我目前的解决方案,但似乎有些不雅:
df_merge = df_a.merge(df_b, on='y', how='left', suffixes=('_a', '_b'))
print(df_merge.head())
df_merge['x'] = df_merge.x_b
df_merge['z'] = df_merge.z_b
df_update = df_a.copy()
df_update.update(df_merge)
print(df_update)
输出:
x_a y z_a x_b z_b
0 0 0 0.505949 0 0
1 1 1 0.231265 1 1
2 2 2 0.241109 2 2
3 3 3 0.579765 NaN NaN
4 4 4 0.172409 NaN NaN
x y z
0 0 0 0.000000
1 1 1 1.000000
2 2 2 2.000000
3 3 3 0.579765
4 4 4 0.172409
5 5 5 0.893562
6 6 6 0.638034
7 7 7 0.940911
8 8 8 0.998453
9 9 9 0.965866
【讨论】:
以上是关于在特定列上更新熊猫的主要内容,如果未能解决你的问题,请参考以下文章