pandas python根据条件将列的一部分插入到列中

杰西卡(Jessica)

我有一个要使用的大型数据集,但在这里我使用的是模拟数据集:

data = {'Block': [1, 1, 1, 1, 1, 1,1,1,1],
    'Concentration': [100, 100, 100, 33, 33, 33,  0,0,0],
    'Name' : ['A', 'A',  'A', 'A', 'A', 'A', 'PB', 'PB', 'PB'],
    'value': [86, 194, 452, 140, 285, 2011, 100, 111, 222 ]}

data = DataFrame(data)

看起来像这样:

In [12]: data
Out[12]: 
     Block  Concentration Name  value
0      1            100    A     86
1      1            100    A    194
2      1            100    A    452
3      1             33    A    140
4      1             33    A    285
5      1             33    A   2011
6      1              0   PB    100
7      1              0   PB    111
8      1              0   PB    222

一共有24个区块,3种浓度类型和每个区块5个名称。

我想为每个块为每个名称添加3个新的“ 0”浓度,而不是名称“ PB”,然后将“ PB”中的值附加到新添加的“ 0”浓度中。

对于此处的模拟数据集,所需的输出将是:

In [13]: data2
Out[13]: 
      Block  Concentration Name  value
0       1            100    A     86
1       1            100    A    194
2       1            100    A    452
3       1             33    A    140
4       1             33    A    285
5       1             33    A   2011
6       1              0    A    100
7       1              0    A    111
8       1              0    A    222
9       1              0   PB    100
10      1              0   PB    111
11      1              0   PB    222

到目前为止,我的代码无法为每个块抓取“ PB”行:

def PBvalue(sgrp): 
    PBvalue = sgrp.loc[data['Name']=='PB'].copy()        
    return PBvalue
PBvalues = data.groupby(['Block', 'Concentration']).apply(PBvalue)

输出:

In [30]: PBvalues
Out[30]: 
                            Block  Concentration Name  value
 Block Concentration                                    
   1     0             6      1              0   PB    100
                       7      1              0   PB    111
                       8      1              0   PB    222
约瑟夫

这是代码:

# create the mock dataframe with 3 blocks

data1 = DataFrame({'Block': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    'Concentration': [100, 100, 100, 33, 33, 33, 100, 100, 100, 33, 33, 33, 0,0,0],
    'Name' : ['A', 'A',  'A', 'A', 'A', 'A', 'B', 'B',  'B', 'B', 'B', 'B', 'PB', 'PB', 'PB'],
    'value': [86, 194, 452, 140, 285, 2011, 8, 19, 45, 14, 28, 201, 100, 111, 222 ]})


data2 = data1.copy(); data2.Block = 2
data3 = data1.copy(); data3.Block = 3

data = pd.concat([data1, data2, data3], axis=0)

def temp1(df):
    df_others = df[df.Name != 'PB']
    df_pb = df[df.Name == 'PB']
    def temp2(dfx):
        df_app = df_pb.copy()
        df_app = df_app[df_app.Concentration==0] # in case name 'PB' have more than one concentrations
        df_app['Name'] = dfx['Name'].values[0] ## modified code
        df_pername = pd.concat([dfx, df_app])
        return df_pername
    df1 = df_others.groupby('Name', group_keys=False).apply(temp2)
    df2 = pd.concat([df1, df_pb])
    return df2

data_changed = data.groupby('Block', group_keys=False).apply(temp1)

data_changed.index = range(len(data_changed))

In [151]: data_changed
Out[151]: 
    Block  Concentration Name  value
0       1            100    A     86
1       1            100    A    194
2       1            100    A    452
3       1             33    A    140
4       1             33    A    285
5       1             33    A   2011
6       1              0    A    100
7       1              0    A    111
8       1              0    A    222
9       1            100    B      8
10      1            100    B     19
11      1            100    B     45
12      1             33    B     14
13      1             33    B     28
14      1             33    B    201
15      1              0    B    100
16      1              0    B    111
17      1              0    B    222
18      1              0   PB    100
19      1              0   PB    111
20      1              0   PB    222
..    ...            ...  ...    ...
58      3              0    B    111
59      3              0    B    222
60      3              0   PB    100
61      3              0   PB    111
62      3              0   PB    222

[63 rows x 4 columns]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据另一列(Python Pandas)的值在列中添加一部分字符串

来自分类Dev

将第一行的一部分和第二行的一部分用作python pandas中的列标题

来自分类Dev

根据列值替换 Pandas Dataframe 的一部分

来自分类Dev

拆分并从列值中取出一部分字符串,然后在 Pandas python 中创建新列

来自分类Dev

如何使用python-pandas将行的一部分读取到数组中?

来自分类Dev

将JSON对象的一部分存储在pandas df中

来自分类Dev

从 Pandas 列中提取任何格式的日期(日期是较长字符串的一部分)

来自分类Dev

Python Pandas:将numpy数组分配给数据框的一部分

来自分类Dev

打印Pandas groupby输出的一部分

来自分类Dev

python pandas:如何使单元格的第一部分成为列名,如何使单元格的第二部分成为列值

来自分类Dev

使用Pandas在python上基于元组的第一部分进行分组

来自分类Dev

根据 2 列的范围将新行插入到 Pandas 数据框中

来自分类Dev

SQL将列的一部分复制到新列中

来自分类Dev

将属性(函数)添加到 pandas.DataFrame() 作为类的一部分

来自分类Dev

将列中的一部分字符串复制到MYSQL中的另一部分

来自分类Dev

将一个字符串的一部分插入到给定位置的另一个字符串中

来自分类Dev

从pandas数据框中删除重复的行,其中只有一部分是相同的

来自分类Dev

将1的random插入到列pandas数据框python中

来自分类Dev

使用 Pandas Python 将系列插入到 CSV 文件的特定列中

来自分类Dev

根据R中另一列的一部分更改列的值

来自分类Dev

Pandas Python,根据行条件选择列

来自分类Dev

Pandas Python,根据行条件选择列

来自分类Dev

根据pandas 0.16中的条件更新列

来自分类Dev

Matplotlib / Pandas:使用时间序列放大图的一部分

来自分类Dev

Matplotlib / Pandas:使用时间序列放大图的一部分

来自分类Dev

用值填充 Pandas 系列的一部分

来自分类Dev

如何在 Pandas 数据帧的一部分上使用 std 函数?

来自分类Dev

行到列的一部分

来自分类Dev

行到列的一部分

Related 相关文章

  1. 1

    根据另一列(Python Pandas)的值在列中添加一部分字符串

  2. 2

    将第一行的一部分和第二行的一部分用作python pandas中的列标题

  3. 3

    根据列值替换 Pandas Dataframe 的一部分

  4. 4

    拆分并从列值中取出一部分字符串,然后在 Pandas python 中创建新列

  5. 5

    如何使用python-pandas将行的一部分读取到数组中?

  6. 6

    将JSON对象的一部分存储在pandas df中

  7. 7

    从 Pandas 列中提取任何格式的日期(日期是较长字符串的一部分)

  8. 8

    Python Pandas:将numpy数组分配给数据框的一部分

  9. 9

    打印Pandas groupby输出的一部分

  10. 10

    python pandas:如何使单元格的第一部分成为列名,如何使单元格的第二部分成为列值

  11. 11

    使用Pandas在python上基于元组的第一部分进行分组

  12. 12

    根据 2 列的范围将新行插入到 Pandas 数据框中

  13. 13

    SQL将列的一部分复制到新列中

  14. 14

    将属性(函数)添加到 pandas.DataFrame() 作为类的一部分

  15. 15

    将列中的一部分字符串复制到MYSQL中的另一部分

  16. 16

    将一个字符串的一部分插入到给定位置的另一个字符串中

  17. 17

    从pandas数据框中删除重复的行,其中只有一部分是相同的

  18. 18

    将1的random插入到列pandas数据框python中

  19. 19

    使用 Pandas Python 将系列插入到 CSV 文件的特定列中

  20. 20

    根据R中另一列的一部分更改列的值

  21. 21

    Pandas Python,根据行条件选择列

  22. 22

    Pandas Python,根据行条件选择列

  23. 23

    根据pandas 0.16中的条件更新列

  24. 24

    Matplotlib / Pandas:使用时间序列放大图的一部分

  25. 25

    Matplotlib / Pandas:使用时间序列放大图的一部分

  26. 26

    用值填充 Pandas 系列的一部分

  27. 27

    如何在 Pandas 数据帧的一部分上使用 std 函数?

  28. 28

    行到列的一部分

  29. 29

    行到列的一部分

热门标签

归档