Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何基于列表访问数据帧中的某些列?_Python 3.x_Pandas_List_Dataframe_Multiple Columns - Fatal编程技术网

Python 3.x 如何基于列表访问数据帧中的某些列?

Python 3.x 如何基于列表访问数据帧中的某些列?,python-3.x,pandas,list,dataframe,multiple-columns,Python 3.x,Pandas,List,Dataframe,Multiple Columns,我创建了一个数据帧: 将熊猫作为pd导入 随机输入 数据=[[random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1)

我创建了一个数据帧:

将熊猫作为pd导入
随机输入
数据=[[random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1)],random,[random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1)]]
df=pd.DataFrame(数据,列=[“A”、“B”、“C”、“D”、“E”])
数据帧如下所示:

    A           B           C           D           E
0   0.736739    0.092037    0.727951    0.086899    0.092297
1   0.047031    0.283759    0.103112    0.047058    0.025392
2   0.955045    0.377484    0.235842    0.355152    0.054702
3   0.426293    0.308971    0.304042    0.021517    0.399164
4   0.415225    0.230748    0.263462    0.310682    0.487341
5   0.936775    0.411212    0.073169    0.317453    0.070046
abcde
0  0.736739  0.184075  0.727951  0.173798  0.184594
1  0.047031  0.567518  0.103112  0.094116  0.050785
2  0.955045  0.754968  0.235842  0.710304  0.109404
3  0.426293  0.617942  0.304042  0.043034  0.798327
4  0.415225  0.461497  0.263462  0.621364  0.974682
5  0.936775  0.822425  0.073169  0.634906  0.140092
我现在想做的是将某些列划分为2。在这种情况下,我想将B、d和E列划分为2。为此,我想使用一个列表。因为在我真正的问题中,索引是权益名称,我想划分的索引保存在一个列表中

这就是我尝试的:

list=[“B”、“D”、“E”]
df1=df[df.列.交点(列表)]*0.5
打印(df1)
结果如下所示:

    A           B           C           D           E
0   0.736739    0.092037    0.727951    0.086899    0.092297
1   0.047031    0.283759    0.103112    0.047058    0.025392
2   0.955045    0.377484    0.235842    0.355152    0.054702
3   0.426293    0.308971    0.304042    0.021517    0.399164
4   0.415225    0.230748    0.263462    0.310682    0.487341
5   0.936775    0.411212    0.073169    0.317453    0.070046
bde
0  0.092038  0.086899  0.092297
1  0.283759  0.047058  0.025392
2  0.377484  0.355152  0.054702
3  0.308971  0.021517  0.399164
4  0.230749  0.310682  0.487341
5  0.411212  0.317453  0.070046
但是我得到的只是一个数据帧,它只包含列表中的列。我希望我的结果将包含新的计算值加上列表中不包含的列中的旧值

结果应该如下所示:

    A           B           C           D           E
0   0.736739    0.092037    0.727951    0.086899    0.092297
1   0.047031    0.283759    0.103112    0.047058    0.025392
2   0.955045    0.377484    0.235842    0.355152    0.054702
3   0.426293    0.308971    0.304042    0.021517    0.399164
4   0.415225    0.230748    0.263462    0.310682    0.487341
5   0.936775    0.411212    0.073169    0.317453    0.070046
abcde
0  0.736739  0.092038  0.727951  0.086899  0.092297
1  0.047031  0.283759  0.103112  0.047058  0.025392
2  0.955045  0.377484  0.235842  0.355152  0.054702
3  0.426293  0.308971  0.304042  0.021517  0.399164
4  0.415225  0.230749  0.263462  0.310682  0.487341
5  0.936775  0.411212  0.073169  0.317453  0.070046
有人知道我如何解决这个问题吗? 非常感谢你的帮助


致以最诚挚的问候!

我喜欢在for循环中解决这个问题,循环遍历包含列名称的列表。您也可以使用它添加新名称(方法2):

原始数据帧(首次打印):

第二个数据帧(第二次打印):

方法2: 输出:

          A         B         C         D         E     new B     new D     new E
0  0.735067  0.213327  0.416205  0.235860  0.094208  0.106664  0.117930  0.047104
1  0.150027  0.524437  0.393283  0.783323  0.520855  0.262218  0.391661  0.260428
2  0.146858  0.328530  0.288445  0.101783  0.286224  0.164265  0.050892  0.143112
3  0.512124  0.302685  0.062246  0.152522  0.536951  0.151343  0.076261  0.268476
4  0.358646  0.928946  0.766012  0.808933  0.002960  0.464473  0.404466  0.001480
5  0.735067  0.436962  0.796247  0.499950  0.048898  0.218481  0.249975  0.024449
试试这个:

df[['B','D','E']] = df[['B','D','E']]*0.5
@在一次建议的编辑中指出,使用
*=

df.loc[:, ['B', 'D', 'E']] *= 0.5, 
df
现在看起来像这样:

    A           B           C           D           E
0   0.736739    0.092037    0.727951    0.086899    0.092297
1   0.047031    0.283759    0.103112    0.047058    0.025392
2   0.955045    0.377484    0.235842    0.355152    0.054702
3   0.426293    0.308971    0.304042    0.021517    0.399164
4   0.415225    0.230748    0.263462    0.310682    0.487341
5   0.936775    0.411212    0.073169    0.317453    0.070046

首先创建原始数据帧的副本,以不修改此内容:

df1=df.copy()

然后您可以使用或
*

df1[['B','D','E']] = df1[['B','D','E']].mul(0.5)
也可使用或
/

df1[['B','D','E']] = df1[['B','D','E']].div(2)

您可以使用下面的赋值函数

将熊猫作为pd导入
随机输入
数据=[[random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1)],random,[random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1)]]
df=pd.DataFrame(数据,列=[“A”、“B”、“C”、“D”、“E”])
lst=[“B”、“D”、“E”]
赋值(**{col:df[col]*0.5表示lst}中的col)
DataFrame.mul(系列)


没有必要使用assgin+循环对itI来说是不必要的。我认为这是一个聪明的回答问题的方法。不要让@ansev让你失望
df1
在我的场景中还没有创建。此外,始终可以选择创建深度副本,然后运行上面给出的操作。
df1[['B','D','E']] = df1[['B','D','E']].div(2)
# Can generalize to different numbers for each column.  
s = pd.Series(0.5, index=['B', 'D', 'E'])

# `reindex` as DataFrame.mul(Series) hasn't implemented `fill_value`
df.mul(s.reindex(df.columns).fillna(1))
 
          A         B         C         D         E
0  0.736739  0.092037  0.727951  0.086899  0.092297
1  0.047031  0.283759  0.103112  0.047058  0.025393
2  0.955045  0.377484  0.235842  0.355152  0.054702
3  0.426293  0.308971  0.304042  0.021517  0.399164
4  0.415225  0.230749  0.263462  0.310682  0.487341
5  0.936775  0.411212  0.073169  0.317453  0.070046