首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从现有DF的元信息中获取新的熊猫数据

从现有DF的元信息中获取新的熊猫数据
EN

Stack Overflow用户
提问于 2015-07-09 02:19:16
回答 1查看 107关注 0票数 0

当前有一个CSV文件,该文件输出数据,如下所示:

代码语言:javascript
复制
[in]
df = pd.read_csv(file_name)
df.sort('TOTAL_MONTHS', inplace=True)
print df[['TOTAL_MONTHS','COUNTEM']]

[out] 
    TOTAL_MONTHS       COUNTEM
    12                 0 
    12                 0 
    12                 2 
    25                 10
    25                 0 
    37                 1
    68                 3

我希望得到“COUNTEM”值在预置箱内的总行数(按TOTAL_MONTHS表示)。

这些数据将通过excel/powerpoint输入到直方图中:

X轴=合同数目

Y轴= Total_months

条色= COUNTEM

图的输入如下(列为COUNTEM桶):

代码语言:javascript
复制
MONTHS    0    1-3    4-6    7-10    10+    20+
0         0    0      0      0       0      0  
1         0    0      0      0       0      0   
2         0    0      0      0       0      0
3         0    0      0      0       0      0
...
12        2    1      0      0       0      0
...
25        1    0      0      0       1      0
...
37        0    1      0      0       0      0
...
68        0    1      0      0       0      0

理想情况下,我希望代码以这种格式输出数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 06:30:56

有趣的问题。了解熊猫(因为我不太清楚),很可能有一个更时尚和更简单的解决办法。但是,也可以通过以下方式进行迭代:

代码语言:javascript
复制
#First, imports and create your data
import pandas as pd

DF = pd.DataFrame({'TOTAL_MONTHS'   : [12, 12, 12, 25, 25, 37, 68], 
                   'COUNTEM'        : [0, 0, 2, 10, 0, 1, 3]
                   })

#Next create a data frame of 'bins' with the months as index and all
#values set at a default of zero
New_DF = pd.DataFrame({'bin0'   : 0,
                       'bin1'   : 0,
                       'bin2'   : 0,
                       'bin3'   : 0,
                       'bin4'   : 0,
                       'bin5'   : 0}, 
                       index = DF.TOTAL_MONTHS.unique())

In [59]: New_DF
Out[59]: 
    bin0  bin1  bin2  bin3  bin4  bin5
12     0     0     0     0     0     0
25     0     0     0     0     0     0
37     0     0     0     0     0     0
68     0     0     0     0     0     0

#Create a list of bins (rather than 20 to infinity I limited it to 100)
bins = [[0], range(1, 4), range(4, 7), range(7, 10), range(10, 20), range(20, 100)]

#Now iterate over the months of the New_DF index and slice the original
#DF where TOTAL_MONTHS equals the month of the current iteration. Then
#get a value count from the original data frame and use integer indexing
#to place the value count in the appropriate column of the New_DF:

for month in New_DF.index:
    monthly = DF[DF['TOTAL_MONTHS'] == month]
    counts = monthly['COUNTEM'].value_counts()
    for count in counts.keys():
        for x in xrange(len(bins)):
            if count in bins[x]:
                New_DF.ix[month, x] = counts[count]

这给了我:

代码语言:javascript
复制
In [62]: New_DF
Out[62]: 
    bin0  bin1  bin2  bin3  bin4  bin5
12     2     1     0     0     0     0
25     1     0     0     0     1     0
37     0     1     0     0     0     0
68     0     1     0     0     0     0

这似乎是你想要的。你可以把索引重命名为你认为合适的.

希望这能有所帮助。也许有人有一个解决方案,使用内置的熊猫功能,但目前看来,这是可行的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31307014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档