我有三个时间序列数组。其中有两个具有3小时间隔的值,而有一个具有6小时间隔的值。我想将它们全部添加到同一数据帧中,以方便地进行时间序列图绘制,并将时间戳设置为索引,但是我不确定如何添加6小时间隔数组以跳过行,以便将值放置在正确的时间。
我在下面有一个可行的例子。
import pandas as pd
A = [ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]
B = [11., 12., 13., 14., 15., 16., 17., 18., 19., 20.]
C = [ 2., 4., 6., 8., 10. ]
data = { 'A_col': A,
'B_col': B
}
df = pd.DataFrame(data,columns=['A_col','B_col'])
print(df)
A_col B_col 0 1.0 11.0 1 2.0 12.0 2 3.0 13.0 3 4.0 14.0 4 5.0 15.0 5 6.0 16.0 6 7.0 17.0 7 8.0 18.0 8 9.0 19.0 9 10.0 20.0
基本上,我想将C添加为列,并使其值出现在索引1、3、5等处,以与A_col的值对齐。我如何有效地做到这一点?熊猫告诉我,每列的大小必须相同。 (我正在使用的实际时间序列数组很长。)我希望它生成一个时间序列图,其中所有值都沿x轴位于正确的位置。
注意:我是熊猫的新手,但是对numpy有更多的经验。
答案 0 :(得分:3)
此行的内容:
df['C'] = np.nan
df.iloc[1::2, -1] = C
print(df)
输出:
A_col B_col C
0 1.0 11.0 NaN
1 2.0 12.0 2.0
2 3.0 13.0 NaN
3 4.0 14.0 4.0
4 5.0 15.0 NaN
5 6.0 16.0 6.0
6 7.0 17.0 NaN
7 8.0 18.0 8.0
8 9.0 19.0 NaN
9 10.0 20.0 10.0
答案 1 :(得分:0)
您可以为奇数创建一个真相系列,然后对它们进行分组以设置所需的值:
df['Truth'] = df['A_col'] % 2 == 1
A_col B_col Truth
0 1.0 11.0 True
1 2.0 12.0 False
2 3.0 13.0 True
3 4.0 14.0 False
4 5.0 15.0 True
5 6.0 16.0 False
6 7.0 17.0 True
7 8.0 18.0 False
8 9.0 19.0 True
9 10.0 20.0 False
这里有两个示例说明您可以如何使用它,因为我不确定您要达到的目标,但是我希望这对您有帮助:
df.loc[df['Truth'] == True, 'Truth'] = df.loc[df['Truth']].groupby(df['Truth']).cumsum()
df.loc[df['Truth'] == False, 'Truth'] = df.loc[df['Truth'] == False]['A_col']
A_col B_col Truth
0 1.0 11.0 1
1 2.0 12.0 2
2 3.0 13.0 2
3 4.0 14.0 4
4 5.0 15.0 3
5 6.0 16.0 6
6 7.0 17.0 4
7 8.0 18.0 8
8 9.0 19.0 5
9 10.0 20.0 10
这对您如何处理所需的价值分组有意义吗?如果您提供有关最终结果的信息,我可以修改我的解决方案以匹配它,
答案 2 :(得分:0)
import pandas as pd
A = [ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]
B = [11., 12., 13., 14., 15., 16., 17., 18., 19., 20.]
C = [ 2., 4., 6., 8., 10. ]
data = { 'A_col': A,
'B_col': B
}
df = pd.DataFrame(data,columns=['A_col','B_col','C_col'])
C_iterator=0
df_size = len(df)
for position in range(df_size):
if position%2 !=0:
df['C_col'].loc[position] = C[C_iterator]
C_iterator+=1
else:
pass
df['C_col']=df['C_col'].astype(float)
print(df)
A_col B_col C_col
0 1.0 11.0 NaN
1 2.0 12.0 2.0
2 3.0 13.0 NaN
3 4.0 14.0 4.0
4 5.0 15.0 NaN
5 6.0 16.0 6.0
6 7.0 17.0 NaN
7 8.0 18.0 8.0
8 9.0 19.0 NaN
9 10.0 20.0 10.0