如何在pandasmultiindex中为每个零级组的第一行赋值



我正在尝试将值分配给多索引数据帧中每个零级组的第一行。第一行是日期和时间,不是各行的通用值。我已经附上了一个代码示例来复制一个最小的数据帧。

import pandas as pd
import numpy as np
np.random.seed(123)
arrays = [np.array(["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"]),np.array(["one", "two", "not_one", "two", "not_one_one", "two", "not_not_one", "two"]),]
df = pd.DataFrame(np.random.randn(8,4), index=arrays)

我尝试过在有和没有列索引的情况下赋值。

df.loc[[df.groupby(level=0).nth(0)],'0'] = 100
xy = list(set(df.index.get_level_values(level=0)))
for ind1 in xy:
df.loc[(ind1, df.iloc[0]),'0'] = 100

我尝试了大约100种不同的iloc变体,但没有运气,我尝试了xs

df.groupby(level=0).xs(0, level=1) = 100

我试过

df.loc[df.groupby(level=0).nth(0)] = 100

此外,

df.groupby(level=0).nth(0) = 100

我已经花了几个小时在这上面,但仍然没有取得任何进展。如有任何帮助,我们将不胜感激。我想从这个开始:

0         1         2         3
bar one         -1.085631  0.997345  0.282978 -1.506295
two         -0.578600  1.651437 -2.426679 -0.428913
baz not_one      1.265936 -0.866740 -0.678886 -0.094709
two          1.491390 -0.638902 -0.443982 -0.434351
foo not_one_one  2.205930  2.186786  1.004054  0.386186
two          0.737369  1.490732 -0.935834  1.175829
qux not_not_one -1.253881 -0.637752  0.907105 -1.428681
two         -0.140069 -0.861755 -0.255619 -2.798589

到此:

0         1         2         3
bar one               100  0.997345  0.282978 -1.506295
two         -0.578600  1.651437 -2.426679 -0.428913
baz not_one           100 -0.866740 -0.678886 -0.094709
two          1.491390 -0.638902 -0.443982 -0.434351
foo not_one_one       100  2.186786  1.004054  0.386186
two          0.737369  1.490732 -0.935834  1.175829
qux not_not_one       100 -0.637752  0.907105 -1.428681
two         -0.140069 -0.861755 -0.255619 -2.798589

您可以使用groupby+cumcount为每个level=0组创建顺序计数器,然后使用loc的布尔索引来更新列0中的值,其中计数器为0:

df.loc[df.groupby(level=0).cumcount().eq(0), 0] = 100

0         1         2         3
bar one          100.000000  0.997345  0.282978 -1.506295
two           -0.578600  1.651437 -2.426679 -0.428913
baz not_one      100.000000 -0.866740 -0.678886 -0.094709
two            1.491390 -0.638902 -0.443982 -0.434351
foo not_one_one  100.000000  2.186786  1.004054  0.386186
two            0.737369  1.490732 -0.935834  1.175829
qux not_not_one  100.000000 -0.637752  0.907105 -1.428681
two           -0.140069 -0.861755 -0.255619 -2.798589

最新更新