gpt4 book ai didi

python - Pandas:计算列中一些附近的元素

转载 作者:行者123 更新时间:2023-12-01 02:32:23 24 4
gpt4 key购买 nike

我有数据框

ID  2016-01   2016-02   2016-03   2016-04   2016-05  2016-06  2016-07  2016-08   2016-09   2016-10   2016-11   2016-12
111 1 1 0 0 0 1 1 0 1 0 0 1
222 0 1 12 0 0 0 1 1 0 0 0 1

我需要在每 6 列中计算附近的 0,并获得最大序列的最大长度。

我对元素进行分组,但我不知道如何计算附近的元素

print(pd.concat([df['ID'], df.drop('ID', 1).groupby((np.arange(len(df.drop('ID', 1).columns)) // 31) + 1,
axis=1).add_prefix('s')], axis=1))

我是说

ID   2016-01   -   2016-06            2016-07   -   2016-12
111 [3] [1, 2]
222 [1, 3] [3]

以及渴望输出

ID    s1   s2
111 3 2
222 3 3

最佳答案

使用自定义函数计算每行连续 0 的数量,然后返回 max 值:

def f(x):
a = x == 0
b = a.cumsum(axis=1)
c = b-b.where(~a, axis=1).ffill(axis=1).fillna(0).astype(int)
return (c.max(axis=1))

arr = (np.arange(len(df.drop('ID', 1).columns)) // 6) + 1
df = df.set_index('ID').groupby(arr, axis=1).apply(f).add_prefix('s').reset_index()
print (df)
ID s1 s2
0 111 3 2
1 222 3 3

详细信息(函数不返回最大值,而是返回所有数据):

def f(x):

a = x == 0
b = a.cumsum(axis=1)
c = b-b.where(~a, axis=1).ffill(axis=1).fillna(0).astype(int)
return (c)


arr = (np.arange(len(df.drop('ID', 1).columns)) // 6) + 1
df = df.set_index('ID').groupby(arr, axis=1).apply(f).add_prefix('s').reset_index()
print (df)
ID s2016-01 s2016-02 s2016-03 s2016-04 s2016-05 s2016-06 s2016-07 \
0 111 0 0 1 2 3 0 0
1 222 1 0 0 1 2 3 0

s2016-08 s2016-09 s2016-10 s2016-11 s2016-12
0 1 0 1 2 0
1 0 1 2 3 0

关于python - Pandas:计算列中一些附近的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46663295/

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