熊猫数据框索引

时间:2020-03-24 11:22:39

标签: python pandas

我有一个接受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有时会返回一个迭代器。我对熊猫很陌生,我想我想知道如何正确执行此操作?

0 个答案:

没有答案