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

2024-04-19 15:09:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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]dataframe中创建一个新列,将长度拆分为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]

抱歉,如果这是基本的,我是相当新的,所以我写的很多东西可能不是最好的方式/必要的,并为长期的职位也很抱歉。你知道吗

任何帮助都将不胜感激。提前谢谢!你知道吗


Tags: csv数据inmiddledfforlen排序
1条回答
网友
1楼 · 发布于 2024-04-19 15:09:50

如果我没看错你的问题,我相信你在试图做两件事。你知道吗

  1. 求列的中值
  2. 创建一个新列,如果值小于中间值,则为0,如果值大于中间值,则为1。你知道吗

让我们先解决#1:

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

太简单了!像这样的东西有很多大熊猫的功能。你知道吗

好的,那么第二点:

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

我们在这里做的是创建一个新的布尔级数,如果该位置的值小于中值,则为假,否则为真。然后我们可以把它转换成一个int,它给出0和1

相关问题 更多 >