Year, TC_Number, Maximum wind speeds
data = pd.DataFrame({
'year': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2],
'TC_number': [0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
'maximum_wind_speed': [20.37199783, 21.2, 21.7, 14.626, 18.108, 21.4, 25.3, 25.3, 22.9, 18.108, 20.2, 22.1, 24.3, 25.5, 27.7, 29.8, 33.6, 36.7, 36.6, 35, 33, 29.7, 29, 20]})
字符串
大家好,
我试着通过网上搜索找到解决方案,但是,似乎没有一个是我要找的。
我知道我想做什么,但我被如何实现代码卡住了。
我首先初始化一个(1000,240)数组。然后我想创建一个循环来填充数组的每一行。每行代表一个热带气旋(TC)记录的最大风速值,240代表TC可能具有的最大值数量。然而,每个TC将具有在最大风速行中记录的不同数量的值。当当前TC编号不等于前一个TC编号时,我希望循环跳转到下一行。
这是我到目前为止所拥有的:
output_array = np.full((1000, 240), np.nan)
#Shape of vmaxsyn is (337079,)
for i in range(1000):
#print("i = ", i)
for j in range(241):
#print("j = ", j)
name_id1 = df.iloc[j]['TC_number']
name_id2 = df.iloc[j-1]['TC_number']
if name_id1 == name_id2:
output_array[i, j] = vmaxsyn[j]
#print(output_array[j,i])
#print([i,j])
else:
#print("breaking out of inner loop")
break
#print("breaking out of outer loop.")
型
我期待着这样的事情:
data = [
[20.372, 21.2, 21.7, 14.62, np.nan, np.nan],
[18.108, 21.4, 25.3, 25.3, 22.9, np.nan],
[18.108, 20.2, 22.1, 24.3, np.nan, np.nan],
[25.5, 27.1, 29.8, 33.6, np.nan, np.nan],
[36.7, 36.6, 35, np.nan, np.nan, np.nan],
[33, 29.7, 29, np.nan, np.nan, np.nan]]
型
问题是没有一个vmaxsyn值被记录到我的输出数组中。我还试图用我的另一种方法来处理广播错误。任何帮助都非常感谢。我特别想用Pandas来实现这一点。
2条答案
按热度按时间dtcbnfnu1#
这里根本不需要
for
循环。首先,将一个id
列附加到您的数据中,该列在TC_number
更改时递增。然后按这个新创建的id
对数据进行分组,并使用pandas.DataFrame.apply
将其转换为列表。字符串
结果会是这样
型
whhtz7ly2#
我不太明白你的输入/输出数组是怎么回事,但你可以这样做:
字符串
使用一个大小为(10,10)的数组,输入为(
print([list(x) for x in array])
)型