我有一个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>
任何帮助都会受到大力赞赏。提前谢谢!
答案 0 :(得分:1)
如果我正确地读你的问题,我相信你正试图做两件事。
让我们先解决#1:
median = df['originalcolumn'].median()
那很简单!对于像这样的事情,有许多伟大的熊猫功能。
好的第二号:
df['newcolumn'] = df[df['originalcolumn'] > median].astype(int)
我们在这里做的是创建一个新的bool系列,如果该位置的值小于中位数,则为false,否则为true。然后我们可以将它转换为一个给出0和1的int。