![](/img/trans.png)
[英]How to efficiently resample a Pandas dataframe into 3d NumPy array?
[英]Populating pandas dataframe efficiently using a 2-D numpy array
我有一个二维的numpy数组,其每行包含三个元素-['dataframe_column_name','dataframe_index','value']。 现在,我尝试使用iloc double for循环填充pandas数据帧,但是速度很慢。 有没有更快的方法可以做到这一点。 我对熊猫有点陌生,因此很抱歉,这是很基本的事情。 这是代码片段:
my_nparray = [['a', 1, 123], ['b', 1, 230], ['a', 2, 321]]
for r in range(my_nparray.shape[0]):
[col, ind, value] = my_nparray[r]
df.iloc[col][ind] = value
my_nparray很大时,这会花费很多时间,还有其他方法吗?
最初假设我可以创建此数据框:
'a' 'b'
1 NaN NaN
2 NaN NaN
我希望输出为:
'a' 'b'
1 123 230
2 321 NaN
您可以使用from_records
然后进行pivot
:
df = pd.DataFrame.from_records(my_nparray, index=1).pivot(columns=0)
2
0 a b
1
1 123.0 230.0
2 321.0 NaN
这指定索引使用数组中的字段1
,数据透视表将Series 0
用于列。
然后,我们可以在列和索引上重置MultiIndex:
df.columns = df.columns.droplevel(None)
df.columns.name = None
df.index.name = None
a b
1 123.0 230.0
2 321.0 NaN
将DataFrame
构造函数与DataFrame.pivot
和DataFrame.rename_axis
:
df = pd.DataFrame(my_nparray).pivot(1,0,2).rename_axis(index=None, columns=None)
print (df)
a b
1 123.0 230.0
2 321.0 NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.