根据Pandas数据框中的其他三列更改一列的值

舍尔

我有一个下面的Pandas数据框,在这里我想根据“时间”,“样本”和“ uid”列更改“ fmc”列的值。

概念如下:

对于相同的dateif df.samples == 'C' & df.uid == 'Plot1'则对应的行值fmc * 0.4

类似地,对于相同的dateif df.samples == 'C' and df.uid == 'Plot2',然后相应行的值fmc*0.8

对于相同的dateif df.samples == 'E' & df.uid == 'Plot1'则对应的行值fmc * 0.4

类似地,对于相同的dateif df.samples == 'E' and df.uid == 'Plot2',然后相应行的值fmc*0.15

对于相同的dateif df.samples == 'ns' & df.uid == 'Plot1'则对应的行值fmc * 0.2

类似地,对于相同的dateif df.samples == 'ns' and df.uid == 'Plot2',然后相应行的值fmc*0.05

我是python的新手,所以如果无法解释清楚,我深表歉意,如果您需要更多说明,请告诉我。

       time        samples    uid                 fmc
0  2015-10-11        C       Plot1              98.226352
1  2015-10-11        C       Plot2             132.984817
2  2015-10-11        E       Plot1             114.147964
3  2015-10-11        E       Plot2             110.083699
4  2015-10-11        ns      Plot1             113.258977
5  2015-10-11        ns      Plot2             113.768023
6  2015-10-19        C       Plot1             118.503214
7  2015-10-19        E       Plot1             108.733209
8  2015-10-19        ns      Plot1              59.316977
9  2015-10-27        C       Plot1             104.977531
10 2015-10-27        C       Plot2             121.213887
11 2015-10-27        E       Plot1             129.575670
12 2015-10-27        E       Plot2             118.639048
13 2015-10-27        ns      Plot1             103.581065
14 2015-10-27        ns      Plot2             102.278469
15 2015-11-17        C       Plot1             103.820689
16 2015-11-17        C       Plot2             117.333382
17 2015-11-17        E       Plot1             143.418932
18 2015-11-17        E       Plot2             160.342155
19 2015-11-17        ns      Plot1              89.890484
里基

这段代码:

import pandas as pd
data = [
    ['2015-10-11', 'C', 'Plot1',  98.226352 ],
    ['2015-10-11', 'C', 'Plot2', 132.984817 ],
    ['2015-10-11', 'E', 'Plot1', 114.147964 ],
    ['2015-10-11', 'E', 'Plot2', 110.083699 ],
    ['2015-10-11', 'ns', 'Plot1', 113.258977 ],
    ['2015-10-11', 'ns', 'Plot2', 113.768023 ],
    ['2015-10-19', 'C', 'Plot1', 118.503214 ],
    ['2015-10-19', 'E', 'Plot1', 108.733209 ],
    ['2015-10-19', 'ns', 'Plot1',  59.316977 ],
    ['2015-10-27', 'C', 'Plot1', 104.977531 ],
    ['2015-10-27', 'C', 'Plot2', 121.213887 ],
    ['2015-10-27', 'E', 'Plot1', 129.575670 ],
    ['2015-10-27', 'E', 'Plot2', 118.639048 ],
    ['2015-10-27', 'ns', 'Plot1', 103.581065 ],
    ['2015-10-27', 'ns', 'Plot2', 102.278469 ],
    ['2015-11-17', 'C', 'Plot1', 103.820689 ],
    ['2015-11-17', 'C', 'Plot2', 117.333382 ],
    ['2015-11-17', 'E', 'Plot1', 143.418932 ],
    ['2015-11-17', 'E', 'Plot2', 160.342155 ],
    ['2015-11-17', 'ns', 'Plot1',  89.890484]
]

df = pd.DataFrame(columns=['time', 'samples', 'uid', 'fmc'], data=data)

print (df.head(10))

df['result'] = df.apply(
                lambda item:
                   (item.fmc * 0.4) if item.samples == 'C' and item.uid == 'Plot1' else \
                   (item.fmc * 0.8) if item.samples == 'C' and item.uid == 'Plot2' else \
                   (item.fmc * 0.4) if item.samples == 'E' and item.uid == 'Plot1' else \
                   (item.fmc * 0.15)if item.samples == 'E' and item.uid == 'Plot2' else \
                   (item.fmc * 0.2) if item.samples == 'ns'and item.uid == 'Plot1' else \
                   (item.fmc * 0.05)if item.samples == 'ns'and item.uid == 'Plot2' else None,
                axis=1
            )

print(df.head(10))

应产生以下输出:

         time samples    uid         fmc
0  2015-10-11       C  Plot1   98.226352
1  2015-10-11       C  Plot2  132.984817
2  2015-10-11       E  Plot1  114.147964
3  2015-10-11       E  Plot2  110.083699
4  2015-10-11      ns  Plot1  113.258977
5  2015-10-11      ns  Plot2  113.768023
6  2015-10-19       C  Plot1  118.503214
7  2015-10-19       E  Plot1  108.733209
8  2015-10-19      ns  Plot1   59.316977
9  2015-10-27       C  Plot1  104.977531
         time samples    uid         fmc      result
0  2015-10-11       C  Plot1   98.226352   39.290541
1  2015-10-11       C  Plot2  132.984817  106.387854
2  2015-10-11       E  Plot1  114.147964   45.659186
3  2015-10-11       E  Plot2  110.083699   16.512555
4  2015-10-11      ns  Plot1  113.258977   22.651795
5  2015-10-11      ns  Plot2  113.768023    5.688401
6  2015-10-19       C  Plot1  118.503214   47.401286
7  2015-10-19       E  Plot1  108.733209   43.493284
8  2015-10-19      ns  Plot1   59.316977   11.863395
9  2015-10-27       C  Plot1  104.977531   41.991012

Process finished with exit code 0

df.apply,使用axis=1启发并传递包含全套条件的lambda函数的启发,您将在result列中获得期望的值

apply函数会将数据框的列(由于axis=1)传递给lambda函数,就像item一系列值中的每个记录一样。lambda函数还会result为系列中的每个给定记录/项目返回相应的值,因此我们不必担心日期/索引值的匹配。

参考pandas.DataFrame.apply 这里

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据Pandas数据框中的其他三列更改一列的值

来自分类Dev

根据其他数据框值创建一列

来自分类Dev

根据pyspark数据框中的其他列的值聚合一列

来自分类Dev

根据其他列中的条件对一列中的值求和,并更改值

来自分类Dev

根据数据框中的其他列更改熊猫数据框的列值

来自分类Dev

根据条件在数据框列中更改值,在另一列中更改值

来自分类Dev

在pandas数据框中添加一列,该列是根据其他列的条件得出的另一列的平均值

来自分类Dev

根据其他列的输入在数据框中创建一列

来自分类Dev

使用其他列的索引值在pandas数据框中的一列中进行字符串索引

来自分类Dev

根据其他列行中的过滤值,在pandas数据框中创建一个新列

来自分类Dev

根据另一列中的值对pandas数据框中的列进行归一化

来自分类Dev

根据另一列中的值对pandas数据框中的列进行归一化

来自分类Dev

如何根据数据框中的其他列值更改列值?

来自分类Dev

根据其他列更改数据框列中的值(python)

来自分类Dev

根据其他列中的值在python 3(pandas)数据框中创建新列

来自分类Dev

根据列表或另一列中的值在Pandas数据框中动态选择列

来自分类Dev

pandas - 根据另一列更改列中的值

来自分类Dev

如何根据另一列中的条件更改数据框的某一列中的值?

来自分类Dev

根据pandas数据框中的其他列创建一个聚合列

来自分类Dev

根据匹配值从其他数据框中复制列

来自分类Dev

Python Pandas:使用三个不同的值在数据框中创建一列

来自分类Dev

根据其他列在python pandas数据框中创建子列表的最大值

来自分类Dev

如何根据多列其他列中的值减去一列中的值?

来自分类Dev

根据共享索引将一列添加到其他数据框中的所有列

来自分类Dev

如何从一列中检索与数据框中其他列的最大值对应的值

来自分类Dev

Pandas数据框:根据另一列中的值操纵列(无需遍历行)

来自分类Dev

根据其他列向熊猫数据框添加一列

来自分类Dev

根据其他数据框中的列值在熊猫数据框中创建列

来自分类Dev

根据数据框的其他列创建一个新的pandas数据框列

Related 相关文章

  1. 1

    根据Pandas数据框中的其他三列更改一列的值

  2. 2

    根据其他数据框值创建一列

  3. 3

    根据pyspark数据框中的其他列的值聚合一列

  4. 4

    根据其他列中的条件对一列中的值求和,并更改值

  5. 5

    根据数据框中的其他列更改熊猫数据框的列值

  6. 6

    根据条件在数据框列中更改值,在另一列中更改值

  7. 7

    在pandas数据框中添加一列,该列是根据其他列的条件得出的另一列的平均值

  8. 8

    根据其他列的输入在数据框中创建一列

  9. 9

    使用其他列的索引值在pandas数据框中的一列中进行字符串索引

  10. 10

    根据其他列行中的过滤值,在pandas数据框中创建一个新列

  11. 11

    根据另一列中的值对pandas数据框中的列进行归一化

  12. 12

    根据另一列中的值对pandas数据框中的列进行归一化

  13. 13

    如何根据数据框中的其他列值更改列值?

  14. 14

    根据其他列更改数据框列中的值(python)

  15. 15

    根据其他列中的值在python 3(pandas)数据框中创建新列

  16. 16

    根据列表或另一列中的值在Pandas数据框中动态选择列

  17. 17

    pandas - 根据另一列更改列中的值

  18. 18

    如何根据另一列中的条件更改数据框的某一列中的值?

  19. 19

    根据pandas数据框中的其他列创建一个聚合列

  20. 20

    根据匹配值从其他数据框中复制列

  21. 21

    Python Pandas:使用三个不同的值在数据框中创建一列

  22. 22

    根据其他列在python pandas数据框中创建子列表的最大值

  23. 23

    如何根据多列其他列中的值减去一列中的值?

  24. 24

    根据共享索引将一列添加到其他数据框中的所有列

  25. 25

    如何从一列中检索与数据框中其他列的最大值对应的值

  26. 26

    Pandas数据框:根据另一列中的值操纵列(无需遍历行)

  27. 27

    根据其他列向熊猫数据框添加一列

  28. 28

    根据其他数据框中的列值在熊猫数据框中创建列

  29. 29

    根据数据框的其他列创建一个新的pandas数据框列

热门标签

归档