Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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 更改多索引数据帧中的特定列值_Python_Pandas_Multi Index - Fatal编程技术网

Python 更改多索引数据帧中的特定列值

Python 更改多索引数据帧中的特定列值,python,pandas,multi-index,Python,Pandas,Multi Index,假设我们有以下数据帧 myDF = DataFrame(np.random.randn(4,2), index= [[1,1,2,2],['Mon','Tue','Mon','Tue']]) myDF 0 1 1 Mon -0.910930 1.592856 Tue -0.167228 -0.763317 2 Mon -0.926121 -0.718729 Tue 0.372288 -0.417337

假设我们有以下数据帧

myDF = DataFrame(np.random.randn(4,2), index= [[1,1,2,2],['Mon','Tue','Mon','Tue']])
myDF

             0           1
1   Mon -0.910930    1.592856
    Tue -0.167228   -0.763317
2   Mon -0.926121   -0.718729
    Tue  0.372288   -0.417337
如果要更改索引1中所有行的第一列的值,请尝试执行以下操作:

myDF.ix[1,:][0] = 99
但这不起作用,并返回相同的数据帧不变。我错过了什么。
谢谢你

当你尝试这样的东西时,熊猫的最新版本会给你一个警告。例如,在版本0.13.1上,您将得到以下结果:

In [4]: myDF.ix[1,:][0] = 99
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
你所做的被称为,但由于熊猫依赖的numpy内部工作的微妙性,它失败了

您的情况比general warning解决的情况更复杂,因为您有一个多索引。要选择外层标签为
1
且列标签为
0
的所有行,请使用
.loc[1,0]
。(另请参见。)


当你尝试这样的东西时,熊猫的最新版本会给出警告。例如,在版本0.13.1上,您将得到以下结果:

In [4]: myDF.ix[1,:][0] = 99
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
你所做的被称为,但由于熊猫依赖的numpy内部工作的微妙性,它失败了

您的情况比general warning解决的情况更复杂,因为您有一个多索引。要选择外层标签为
1
且列标签为
0
的所有行,请使用
.loc[1,0]
。(另请参见。)


我相信,我们可以通过以下方式实现真正的灵活性:

index = [idx for idx, vals in enumerate(myDF.index.values) if vals[1] in ['Mon','Wed'] and vals[0] in [2,3,4]]
colums = [0,1]
myDF.iloc[index, columns] = 99
从for循环创建索引不是最有效的方法,因此可以创建一个字典,其中键是多索引元组,值是索引

通过这种方式,我们可以指定要更改两个索引级别中的哪些值。 .xs()执行类似的操作,但不能通过该函数更改值


如果有一个更简单的方法,我真的很想找到它。

我相信我们可以通过使用以下方法获得真正的灵活性:

index = [idx for idx, vals in enumerate(myDF.index.values) if vals[1] in ['Mon','Wed'] and vals[0] in [2,3,4]]
colums = [0,1]
myDF.iloc[index, columns] = 99
从for循环创建索引不是最有效的方法,因此可以创建一个字典,其中键是多索引元组,值是索引

通过这种方式,我们可以指定要更改两个索引级别中的哪些值。 .xs()执行类似的操作,但不能通过该函数更改值


如果有更简单的方法,我真的很想找到答案。

您在数据帧上使用过.update()吗?不,更新做了一些非常不同的事情。它将另一个数据帧作为参数。您是否尝试在该数据帧上使用.update()?不,更新做了一些非常不同的事情。它将另一个数据帧作为参数。我希望更改列中特定索引的所有值。“1月0日”(0.214686)未更改为99。有什么解决办法吗?我明白了。您需要
.loc
(基于标签)而不是
.iloc
(基于位置)。我相应地编辑了答案。我想更改列中特定索引的所有值。“1月0日”(0.214686)未更改为99。有什么解决办法吗?我明白了。您需要
.loc
(基于标签)而不是
.iloc
(基于位置)。我据此编辑了答案。