用其他集合替换DataFrame子集(DataFrame,serie,list ...)

时间:2018-08-03 19:30:22

标签: python pandas numpy dataframe

我正在尝试变形。 我有一个有100k行的DataFrame。我生成了将其添加到新DataFrame中的字符串。

最后,我有以下内容:

df[df['Col1'] == value1]:
        Col1           Col2

6200    value1         string1
6201    value1         string2
6202    value1         string3


stringdf:

         Col2
0        goodstring1
1        goodstring2

对于Col1的垂直值,理想的stringdf与df的子集相同。

我想尽可能地更改df中的行。在此示例中,将更改2行。

我会得到:

df[df['Col1'] == value1]:
        Col1           Col2

6200    value1         goodstring1
6201    value1         goodstring2
6202    value1         string3

我的方法是:

for i in range(0,len(stringdf)):
     df['Col2'][df['Col1'] == value1].iloc[i] = stringdf['Col2'].iloc[i]

但这不会通过而不会影响数据帧df。

有什么建议,解释或建议吗?我希望有一个非常快的处理时间。

我也尝试过的方法在这里How to replace part of dataframe in pandas

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

将索引stringdf重新索引到已过滤的子数据帧的索引,然后在原始数据帧上使用update

df = pd.DataFrame(
    {'Col1': ['value1'] * 3, 
     'Col2': ['string1', 'string2', 'string3']}, 
    index=[6200, 6201, 6203])

stringdf = pd.DataFrame({'Col2': ['goodstring1', 'goodstring2']})

idx = df[df['Col1'] == 'value1'].index[:len(stringdf)]
df.update(stringdf.set_index(idx))

>>> df
        Col1         Col2
6200  value1  goodstring1
6201  value1  goodstring2
6203  value1      string3