python - 是否有一个 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
我能找到的所有示例在他们希望将它们分开的列中都有不同的名称。一些帮助或指示会帮助我很多。
解决方案
使用 split by_
并通过索引选择第一个列表:
g = df.groupby(df.names.str.split('_').str[0])
推荐阅读
- algorithm - 线性时间内不同值的最大子数组的算法
- python - 如何检查用户输入是否对披萨列表/元组有效?
- c# - 在 selenium C# 中的 iframe 中移动鼠标光标不起作用
- sqlite - 如何将数据库从 SQL Server Express 移植到 sqlLite
- c# - C# Moq 拦截方法调用
- javascript - React.js 在 socket.on 上添加一个类
- opencl - OpenCL - 图像的保存区域
- windows - 在 Windows 上安装 mxnet 时出现无法满足的错误。我正在使用 ANACONDA 5.1.0 版本和 Python 3.5.3 版本
- mysql - mysql:无法识别的语句类型。(靠近WITH)
- java - 数据模型设计和许可