首页 > 解决方案 > 是否有一个 groupby 函数可以创建一个从名称到下划线的新数据框?

问题描述

我正在尝试在 pandas 中设置一个脚本,它可以帮助我对一些数据进行排序,我正在研究如何去做,这就是我已经取得的进展。这是我第一次尝试熊猫。

我的想法是:有一个包含 4 个列的 csv:1 个包含名称,3 个包含数据。我想根据名称对数据进行分组,名称的末尾总是有一个下划线+一个递增的数字,并且会有所不同。我还没有弄清楚如何编码,所以现在我试图用类似的字符来破坏数据。

这是我的代码:

import pandas as pd import matplotlib.pyplot as plt from matplotlib import style df = pd.read_csv("C:\Python27\Projects\Pandas\csv_testing\csvtesty.csv",header=None,names=['names','x','y','z','code'])
#df.set_index('names',inplace=True) g = (df.groupby(['names', df.names.str[:3]])) for names, names_df in g:
    print(names)
    print(names_df)

我的 csv 样本:

e3_30,3232.77,652478.1833,112.100,10272
e3_31,3232.78,652478.1834,112.101,10471
e3_32,3232.79,652478.1835,112.102,10670
dawn21_1,3232.70,652478.1826,112.093,10869
dawn21_2,3232.78,652478.1834,112.101,11068
dawn21_3,3232.86,652478.1842,112.109,11267
dawn21_4,3232.94,652478.1850,112.117,11466
dawn21_5,3232.102,652478.1858,112.125,11665

我试图将它们分成具有相似名称的数据框。

我的部分输出:

 names        x          y       z  code
0  d1_1  3232.27  652478.07  112.05   123
   names       x           y        z  code
9  d1_10  3232.4  652478.464  112.063  1914
    names        x           y        z  code
10  d1_11  3232.42  652478.577  112.065  2113
    names        x          y        z  code
11  d1_12  3232.44  652478.69  112.067  2312
    names        x           y        z  code
12  d1_13  3232.46  652478.803  112.069  2511
    names        x           y        z  code
13  d1_14  3232.48  652478.916  112.071  2710
    names       x            y        z  code
14  d1_15  3232.5  652478.1029  112.073  2909
    names        x            y        z  code
15  d1_16  3232.52  652478.1142  112.075  3108
    names        x            y        z  code
16  d1_17  3232.54  652478.1255  112.077  3307
    names        x            y        z  code
17  d1_18  3232.56  652478.1368  112.079  3506
    names        x            y        z  code
18  d1_19  3232.58  652478.1481  112.081  3705
  names        x          y        z  code
1  d1_2  3232.28  652478.08  112.051   322
    names       x            y        z  code
19  d1_20  3232.6  652478.1594  112.083  3904
    names        x            y        z  code
20  d1_21  3232.62  652478.1707  112.085  4103
    names        x           y        z  code
21  d1_22  3232.64  652478.182  112.087  4302
  names        x          y        z  code
2  d1_3  3232.29  652478.09  112.052   521
  names       x         y        z  code
3  d1_4  3232.3  652478.1  112.053   720
  names        x          y        z  code
4  d1_5  3232.31  652478.11  112.054   919
  names        x          y        z  code
5  d1_6  3232.32  652478.12  112.055  1118
  names        x           y        z  code
6  d1_7  3232.34  652478.125  112.057  1317
  names        x           y        z  code
7  d1_8  3232.36  652478.238  112.059  1516

我能找到的所有示例在他们希望将它们分开的列中都有不同的名称。一些帮助或指示会帮助我很多。

标签: pythonpandasdataframepandas-groupby

解决方案


使用 split by_并通过索引选择第一个列表:

g = df.groupby(df.names.str.split('_').str[0])

推荐阅读