gpt4 book ai didi

python - 根据索引条件创建新列

转载 作者:行者123 更新时间:2023-11-28 22:21:26 24 4
gpt4 key购买 nike

我有 df:

arrays = [np.array(['bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'baz', 'baz', 'baz', 'baz', 'baz', 'baz', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo']),
np.array(['one','two'] * 9),
np.array([1,2,3] * 6)]
df = pd.DataFrame(np.random.randn(18,2), index=arrays)


col0 col1
bar one 1 0.872359 -1.115871
two 2 -0.937908 -0.528563
one 3 -0.118874 0.286595
two 1 -0.507698 1.364643
one 2 1.507611 1.379498
two 3 -1.398019 -1.603056
baz one 1 1.498263 0.412380
two 2 -0.930022 -1.483657
one 3 -0.438157 1.465089
two 1 0.161887 1.346587
one 2 0.167086 1.246322
two 3 0.276344 -1.206415
foo one 1 -0.045389 -0.759927
two 2 0.087999 -0.435753
one 3 -0.232054 -2.221466
two 1 -1.299483 1.697065
one 2 0.612211 -1.076738
two 3 -1.482573 0.907826

现在我想创建"new"列:

for 'bar'
if index.level(2) > 1
"NEW" = col1
else
"NEW" = col2

'baz' 与 >2 相同

'foo' 与 >3 相同

没有 Py 循环怎么办?

最佳答案

您可以使用 get_level_values用于按级别选择索引值,然后用于新列 numpy.where :

#if possible use dictionary
d = {'bar':1, 'baz':2, 'foo':3}
m = df.index.get_level_values(2) > df.rename(d).index.get_level_values(0)

df['NEW'] = np.where(m, df.col1, df.col2)

对于更通用的解决方案,请使用 Series.rank :

a = df.index.get_level_values(2) 
b = df.index.get_level_values(0).to_series().rank(method='dense')

df['NEW'] = np.where(a > b, df.col1, df.col2)

详细信息:

print (b)
bar 1.0
bar 1.0
bar 1.0
bar 1.0
bar 1.0
bar 1.0
baz 2.0
baz 2.0
baz 2.0
baz 2.0
baz 2.0
baz 2.0
foo 3.0
foo 3.0
foo 3.0
foo 3.0
foo 3.0
foo 3.0
dtype: float64

关于python - 根据索引条件创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48339915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com