Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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 - Fatal编程技术网

Python 熊猫,基于重复计数的现有列创建新列

Python 熊猫,基于重复计数的现有列创建新列,python,pandas,Python,Pandas,解释起来有点复杂,所以我会尽力的。我有一个有两列的熊猫:小时(从1到24)和值(对应于每个小时)。数据集索引非常庞大,但列hour在24小时的基础上重复(从1到24)。我正在尝试创建新的24列:value-1、value-2、value-3…value-24,它将对应于每一行和-1小时的值,以及-2小时的值(从上面的行) 所有数值均为示例。正如我所说的,有很多行,不仅仅是一天中所有小时的24行,还有从1到24的所有后续时间序列,等等。 提前感谢,愿原力与你同在 这就是你需要的吗 df = pd.

解释起来有点复杂,所以我会尽力的。我有一个有两列的熊猫:小时(从1到24)和值(对应于每个小时)。数据集索引非常庞大,但列hour在24小时的基础上重复(从1到24)。我正在尝试创建新的24列:value-1、value-2、value-3…value-24,它将对应于每一行和-1小时的值,以及-2小时的值(从上面的行)

所有数值均为示例。正如我所说的,有很多行,不仅仅是一天中所有小时的24行,还有从1到24的所有后续时间序列,等等。 提前感谢,愿原力与你同在

这就是你需要的吗

df = pd.DataFrame([[1,10],[2,11],
             [3,12],[4,13]], columns=['hour','value'])

for i in range(1, 24):
    df['value -' + str(i)] = df['value'].shift(i).fillna(0)
结果:


这就是你要找的吗

import pandas as pd
df = pd.DataFrame({'hour': list(range(24))*2, 
                   'value': list(range(48))})

shift_cols_n = 10 
for shift in range(1, shift_cols_n): 
    new_columns_name = 'value - ' + str(shift)

    # Assuming that you don't have any NAs in your dataframe
    df[new_columns_name] = df['value'].shift(shift).fillna(0)

    # A safer (and a less simple) way, in case you have NAs in your dataframe
    df[new_columns_name] = df['value'].shift(shift)
    df.loc[:shift, new_columns_name] = 0

print(df.head(9))

   hour  value  value - 1  value - 2  value - 3  value - 4  value - 5  \
0     0      0        0.0        0.0        0.0        0.0        0.0   
1     1      1        0.0        0.0        0.0        0.0        0.0   
2     2      2        1.0        0.0        0.0        0.0        0.0   
3     3      3        2.0        1.0        0.0        0.0        0.0   
4     4      4        3.0        2.0        1.0        0.0        0.0   
5     5      5        4.0        3.0        2.0        1.0        0.0   
6     6      6        5.0        4.0        3.0        2.0        1.0   
7     7      7        6.0        5.0        4.0        3.0        2.0   
8     8      8        7.0        6.0        5.0        4.0        3.0   

   value - 6  value - 7  value - 8  value - 9  
0        0.0        0.0        0.0        0.0  
1        0.0        0.0        0.0        0.0  
2        0.0        0.0        0.0        0.0  
3        0.0        0.0        0.0        0.0  
4        0.0        0.0        0.0        0.0  
5        0.0        0.0        0.0        0.0  
6        0.0        0.0        0.0        0.0  
7        1.0        0.0        0.0        0.0  
8        2.0        1.0        0.0        0.0  

请问你为什么要这样做?您引入了大量冗余数据,因此可能有更好的方法。最好不要将逻辑写入数据库,而是写入独立的函数。你可能应该重新考虑一下。那太好了——有没有办法避免这种循环?
import pandas as pd
df = pd.DataFrame({'hour': list(range(24))*2, 
                   'value': list(range(48))})

shift_cols_n = 10 
for shift in range(1, shift_cols_n): 
    new_columns_name = 'value - ' + str(shift)

    # Assuming that you don't have any NAs in your dataframe
    df[new_columns_name] = df['value'].shift(shift).fillna(0)

    # A safer (and a less simple) way, in case you have NAs in your dataframe
    df[new_columns_name] = df['value'].shift(shift)
    df.loc[:shift, new_columns_name] = 0

print(df.head(9))

   hour  value  value - 1  value - 2  value - 3  value - 4  value - 5  \
0     0      0        0.0        0.0        0.0        0.0        0.0   
1     1      1        0.0        0.0        0.0        0.0        0.0   
2     2      2        1.0        0.0        0.0        0.0        0.0   
3     3      3        2.0        1.0        0.0        0.0        0.0   
4     4      4        3.0        2.0        1.0        0.0        0.0   
5     5      5        4.0        3.0        2.0        1.0        0.0   
6     6      6        5.0        4.0        3.0        2.0        1.0   
7     7      7        6.0        5.0        4.0        3.0        2.0   
8     8      8        7.0        6.0        5.0        4.0        3.0   

   value - 6  value - 7  value - 8  value - 9  
0        0.0        0.0        0.0        0.0  
1        0.0        0.0        0.0        0.0  
2        0.0        0.0        0.0        0.0  
3        0.0        0.0        0.0        0.0  
4        0.0        0.0        0.0        0.0  
5        0.0        0.0        0.0        0.0  
6        0.0        0.0        0.0        0.0  
7        1.0        0.0        0.0        0.0  
8        2.0        1.0        0.0        0.0