我有一个接受Pandas数据框作为输入的函数。该框架具有一个标识符“ id”,我想分别处理每个唯一的标识符“ id”,然后将结果写回到一个单独的列中。有时可以正常工作:
import pandas as pd
import numpy as np
def process_data(indata):
# Add new column
indata = indata.join(pd.DataFrame({'result': []}))
indata['result'] = False
for id in np.unique(indata['id']):
data_for_one_id = indata[indata['id'] == id]
# Do some operations on the values, for instance this
result = data_for_one_id['value'].to_numpy() >= 2
# Write back to original array. TODO: How to do this properly?
indata.loc[data_for_one_id.index, 'result'] = result
return indata
indata = pd.DataFrame({'id': [1, 1, 1, 2, 2, 2], 'value': range(6)})
print("Before \r\n", indata)
outdata = process_data(indata)
print("After \r\n", outdata)
哪个产生了预期的结果
>>>Before
id value
0 1 0
1 1 1
2 1 2
3 2 3
4 2 4
5 2 5
After
id value result
0 1 0 False
1 1 1 False
2 1 2 True
3 2 3 True
4 2 4 True
5 2 5 True
所以这是我执行此操作的基本原则,但是它不适用于所有DataFrame indata。例如,
indata.loc[data_for_one_id.index, 'result'] = result
有时会产生
发生异常:ValueError使用可迭代的设置时,必须具有相同的len键和值
我猜data_for_one_id.index有时会返回一个迭代器。我对熊猫很陌生,我想我想知道如何正确执行此操作?