Python Pandas:基于抽样结果创建新变量

时间:2015-07-23 06:35:34

标签: python pandas

我有一个类似的数据框:

>>>df = pd.DataFrame({"V1": range(1, 6)})  
>>>df
   V1
0   1
1   2
2   3
3   4
4   5

我想将数据集的平均值分为两个子集。如果该值大于平均值,则该值将在子集1中,其余值将在子集2中。

对于每个子集,我想对其中一个子集进行采样并创建一个新变量来标记它们,如“T”,其余值将标记为“F”。

结果应该是一个数据框,如:

   V1  label
0   1     T
1   2     F
2   3     F
3   4     T
4   5     F

我使用了下面的代码,但它们没有用。我的问题有什么解决方案吗?

df['label'] = "F"
df[df['V1'] > df['V1'].mean()].sample(1)['label'] = "T"

2 个答案:

答案 0 :(得分:0)

我能想到的一个简单的方法就是 -

In [4]: df['label'] = 'F'

In [33]: df.loc[df[df['V1'] > df['V1'].mean()].sample(1).index,'label'] = 'T'

In [34]: df.loc[df[df['V1'] <= df['V1'].mean()].sample(1).index,'label'] = 'T'

In [35]: df
Out[35]:
   V1 label
0   1     T
1   2     F
2   3     F
3   4     F
4   5     T

答案 1 :(得分:0)

你应该写:

root@darkstar:~: pip install igraph
Collecting igraph
  Downloading igraph-0.1.8-py2.py3-none-any.whl (119kB)
    100% |████████████████████████████████| 122kB 1.7MB/s
Collecting ipython (from igraph)
  Downloading ipython-3.2.1-py2-none-any.whl (3.4MB)
    100% |████████████████████████████████| 3.4MB 203kB/s 
Installing collected packages: ipython, igraph
Successfully installed igraph-0.1.8 ipython-3.2.1
root@darkstar:~: python -c 'print __import__("igraph")'
<module 'igraph' from '/usr/lib64/python2.7/site-packages/igraph/__init__.pyc'>

(max)user@darkstar:max$ python -c 'print __import__("igraph")'
<module 'igraph' from '/usr/lib64/python2.7/site-packages/igraph/__init__.pyc'>