我想从几个列表中为数据框添加值。列表是:
car_list
milage_lists
avg_speeds
和索引列表idx
(未排序)。我想用index idx
中的所有元素的值替换三个列表中的值。
我试过的是:
sec_idx = range(len(idx))
for index, second_index in zip(idx, sec_idx):
df.at[index,'col1'] = car_list[second_index]
df.at[index,'col3'] = mileage_lists[second_index]
df.at[index,'col5'] = avg_speeds[second_index]
然而,这只是冻结。我怎么能这样做?
编辑:这是一个最小的工作示例。
df = pd.DataFrame([[1, 2, 4, 7], [1, 3, 3, 6], [4, 3, 6, 6], [1, 2, 4, 7], [1, 3, 3, 6], [4, 3, 6, 6]], columns=['A', 'B', 'C', 'D'])
idx = [1, 3]
car_values = [344, 626]
gas_values = [12321 , 124124]
for ix in range(2):
df.at[idx[ix], 'A'] = car_values[ix]
df.at[idx[ix], 'D'] = gas_values[ix]
问题是大型数据集(60 000行)冻结。
答案 0 :(得分:1)
这应该可以解决问题(允许您指定列标题):
import pandas as pd
df = pd.DataFrame([[1, 2, 4, 7], [1, 3, 3, 6], [4, 3, 6, 6], [1, 2, 4, 7], [1, 3, 3, 6], [4, 3, 6, 6]], columns=['A', 'B', 'C', 'D'])
indices = [1, 3]
car_values = [344, 626]
gas_values = [12321 , 124124]
for idx, i, j in zip(indices, car_values, gas_values):
df['A'].iloc[idx] = i
df['B'].iloc[idx] = j
答案 1 :(得分:0)
如果您有一个带索引的列表
idx_list = [idx1, idx2, idex3]
以及值为
的列表列表values_list = [car_list, milage_lists, avg_speeds]
然后您可以使用以下内容迭代列表,索引将增加列号
column_names= ['A', 'B', 'C']
for idx, list, col in zip(idx_list, values_list, column_names):
df.iloc[idx,col] = list
索引不需要排序
答案 2 :(得分:0)
尝试使用以下矢量化解决方案:
In [175]: df.loc[idx, ['A','D']] = np.column_stack((car_values, gas_values))
In [176]: df
Out[176]:
A B C D
0 1 2 4 7
1 344 3 3 12321
2 4 3 6 6
3 626 2 4 124124
4 1 3 3 6
5 4 3 6 6