python - 拆分特定行的值而不复制它们

标签 python pandas

我正在尝试清理我的 csv 文件。这样做时,我必须复制“数量”> 1 的产品行。我是这样做的:

file_in = file_in.loc[file_in.index.repeat(file_in.´Quantity)].reset_index(drop=True) 

但是现在我遇到了另一个问题。在我的一些产品的另一列中,我有 SerialNumbers ,它们一开始就添加在一行中,当我重复时,它们都获得了所有序列号。 现在我想拆分这些序列号,以便每一行只有一个 .

因此:

   Quantity   SerialNumbers       ProductName
1   3           AB1 AB2 AB3            PR
2   3           AB1 AB2 AB3            PR
3   3           AB1 AB2 AB3            PR
4   1             CD                   monitor
5   4            NAN                   mouse
6   4            NAN                   mouse
7   4            NAN                   mouse
8   4            NAN                   mouse
9   4          EF1 EF2 EF3 EF4         ace
10   4          EF1 EF2 EF3 EF4         ace 
11   4          EF1 EF2 EF3 EF4         ace
12   4          EF1 EF2 EF3 EF4         ace
13   2            NAN                 screeen
14   2            NAN                 screeen
15   1            NAN                 flash
...

我需要它是这样的:

   Quantity   SerialNumbers       ProductName
1   3           AB1                    PR
2   3           AB2                    PR
3   3           AB3                    PR
4   1           CD                   monitor
5   4           NAN                   mouse
6   4           NAN                   mouse
7   4           NAN                   mouse
8   4           NAN                   mouse
9   4           EF1                     ace
10   4           EF2                     ace 
11   4           EF3                     ace
12   4           EF4                     ace
13   2          NAN                 screeen
14   2          NAN                 screeen
15   1          NAN                 flash
..

我尝试添加一个新列,首先从序列号创建列表,然后使用 groupby 函数编辑。 我尝试使用 this ,但它不起作用。

file_in['Temp_Split'] = numpy.where((~file_in['Temp_Split'].isna()) & (file_in['Quantity']>1),file_in['Temp_Serial'].str.split() & file_in.groupby(['Position','Quantity'])['Temp_Split'].rank(method='first'), file_in['Temp_split'])

我搜索了类似的问题,但它们都是为了在拆分值时复制行。 也许我应该更改第一行代码,以便在重复时检查序列号并对其进行编辑。但不太确定我应该怎么做。

编辑:我不是试图在将值拆分为一列时复制行,而是尝试删除一行不需要的内容并添加到下一行。如示例所示。行数仍与开始时相同

最佳答案

尝试:

df.SerialNumbers.replace({'NAN':np.nan}, inplace=True)
df['count'] = df.groupby('SerialNumbers').SerialNumbers.cumcount()

f = (lambda x: x['SerialNumbers']
               if x['SerialNumbers'] is np.nan
               else x['SerialNumbers'][x['count']])

df['SerialNumbers'] = df.SerialNumbers.str.split(' ')
df['SerialNumbers'] = df.apply(lambda x: f(x), axis=1)

df.drop(columns='count')

    Quantity SerialNumbers ProductName
0          3           AB1          PR
1          3           AB2          PR
2          3           AB3          PR
3          1            CD     monitor
4          4           NaN       mouse
5          4           NaN       mouse
6          4           NaN       mouse
7          4           NaN       mouse
8          4           EF1         ace
9          4           EF2         ace
10         4           EF3         ace
11         4           EF4         ace
12         2           NaN     screeen
13         2           NaN     screeen
14         1           NaN       flash

我使用Groupby.cumcount来查找每个字符串的位置,然后str.split应用以选择列表中的项目。

关于python - 拆分特定行的值而不复制它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55865404/

相关文章:

python - 按计数对 Pandas 多索引进行排序?

python - 如何按数字顺序导入图像?

python - 如何将 Pandas 数据框中带逗号的字符串数字转换为 float

Python:在数据框中将 timedelta 转换为 int

python - Pandas Python : sort df while excluding given rows by label

python - 如何在python中编写和保存html文件?

python - pd.ExcelWriter, writer.save(), 下载文件到本地

python - 如何将数据框中的 24 小时时间转换为总秒数

python - 在 Python 中用 NaN 替换一列中的多个字符

python - 如何使用 fillna() 函数在 python 中填充 NA/Null 的分类变量