我有一个带有这些列的汽车的数据框.

Car_codecar_modelupdate_Datesensor_codes每辆车都有多个传感器,分别列在sensor_codes/之间,如下所示:

df = pd.DataFrame([['x','iii-2019-10-16','18/04/2019','115/556/879/115'],
                   ['x','iii-2019-10-16','21/07/2019','87/998/115'],
                   ['x','iii-2019-10-16','','115/556/879'],
                   ['x','zzz-2020-10-25','12/04/2022',''],
                   ['y','qqq-2018-05-28','10/12/2017','789/554/745'], 
                   ['y','qqq-2018-05-28','15/02/2018','789/554/75'],
                   ['y','ooo-2019-11-22','30/05/2019','55'],
                   ['y','rrr-16-12-2020','16/12/2020',''],
                   ['z','ppt-2019-12-03','07/02/2018','889/654/750'],
                   ['z','ttt-2019-12-03','28/05/2019','119/55/75'],
                   ['z','ttt-2019-12-03','09/09/2019'],
                   ['z','ttt-2019-12-03','30/09/2019']
                  
                  ],
                  columns=['Car_code','car_model','update_Date','sensor_codes'])
df

我需要创建一个只有两列的新数据框:Car_code和传感器代码(将包含唯一的传感器),因此每个car_code都有多行,每个行都有一个传感器,如下所示:

推荐答案

您可以try :

df_result = (
    df[['Car_code']]
    .assign(sensor_codes=df['sensor_codes'].str.split('/'))
    .explode('sensor_codes')
    .loc[lambda df:
         df['sensor_codes'].notna() & df['sensor_codes'].str.strip().ne('')
    ].drop_duplicates(keep='first')
    .assign(sensor_codes=lambda df: df['sensor_codes'].astype('int'))
    .reset_index(drop=True)
)
  • Select 列Car_code作为数据帧(因此使用双括号),并添加sensor_codes作为新列,但使用.str.split('/')'/'中的项拆分为列表.
  • 然后对sensor_codes列进行.explode展平,这会将相应的项目保留在Car_code中.
  • 然后使用.loc过滤掉NaN(这里是None)或sensor_codes中有空字符串的行(.str.strip只是为了防止项目中只有空格).
  • 然后删除除第一行以外的重复行.
  • 最后,将sensor_codes转换为整数并重置索引(两者都是可选的,很可能是您不需要它).

样本结果:

   Car_code sensor_codes
0         x          115
1         x          556
2         x          879
3         x           87
4         x          998
5         y          789
6         y          554
7         y          745
8         y           75
9         y           55
10        z          889
11        z          654
12        z          750
13        z          119
14        z           55
15        z           75

Python相关问答推荐

Pandas 填充条件是另一列

如何使用scipy从频谱图中回归多个高斯峰?

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

django禁止直接分配到多对多集合的前端.使用user.set()

从groupby执行计算后创建新的子框架

如何请求使用Python将文件下载到带有登录名的门户网站?

ODE集成中如何终止solve_ivp的无限运行

try 将一行连接到Tensorflow中的矩阵

用渐近模计算含符号的矩阵乘法

将链中的矩阵乘法应用于多组值

如何在一组行中找到循环?

使用SQLAlchemy从多线程Python应用程序在postgr中插入多行的最佳方法是什么?'

多个矩阵的张量积

高效生成累积式三角矩阵

如何在Pandas中用迭代器求一个序列的平均值?

根据过滤后的牛郎星图表中的数据计算新系列

是否需要依赖反转来确保呼叫方和被呼叫方之间的分离?

将数据从一个单元格保存到Jupyter笔记本中的下一个单元格

如何删除剪裁圆的对角线的外部部分

当lambda函数作为参数传递时,pyo3执行