我正在尝试变形。 我有一个有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
谢谢您的帮助!
答案 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