将列表拆分一半长度并添加具有相关值的新列

时间:2018-06-01 17:29:04

标签: python pandas

我有一个csv数据文件,我已经将列值拆分为5个数据集,每个人使用:

for i in range(1,6):
    PersonData = df[df['Person'] == i].values
    P[i] = PersonData

我想根据一列将数据按升序排序,然后将数据分成该列的一半以找到中位数。

所以我用以下内容对数据进行了排序:

dataP = {}

for i in range(1,6):
    sortData = P[i][P[i][:,9].argsort()]
    P[i] = sortData
    P[i] = pd.DataFrame(P[i])
dataP[1]

使用它我得到每个数据集1-6的数据帧,按相关列(9)排序,具体取决于我在dataP [i]中放入的数字。

然后我计算了一半的长度:

for i in range(1,6):
    middle = len(dataP[i])/2
    print(middle)

这就是我被困的地方!

我需要在每个dataP [i]数据帧中创建一个新列,将长度分成2,如果它在前半部分,则给出值0,如果在第二半,则为1。

这是我尝试过的,但我不明白为什么它不能生成一个新的值0和1列表,我可以在以后附加到dataP [i]:

for n in range(1, (len(dataP[i]))):
    for n, line in enumerate(dataP[i]):
        if middle > n:
            confval = 0
        elif middle < n:
            confval = 1
for i in range(1,6): 
    Confval[i] = confval
Confval[1]

对不起,如果这是基本的,我对此非常陌生,所以我写的很多东西可能不是最好的方式/必要的,对不起也很长。< / p>

任何帮助都会受到大力赞赏。提前谢谢!

1 个答案:

答案 0 :(得分:1)

如果我正确地读你的问题,我相信你正试图做两件事。

  1. 查找列的中值
  2. 创建一个新列,如果该值小于中值,则为0;如果更大,则为1。
  3. 让我们先解决#1:

    median = df['originalcolumn'].median()

    那很简单!对于像这样的事情,有许多伟大的熊猫功能。

    好的第二号:

    df['newcolumn'] = df[df['originalcolumn'] > median].astype(int)

    我们在这里做的是创建一个新的bool系列,如果该位置的值小于中位数,则为false,否则为true。然后我们可以将它转换为一个给出0和1的int。