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