python - 将给定的 pandas 数据帧转换为另一个数据帧

标签 python pandas dataframe

我有一个如下所示的 pandas 数据框。这给了我从各个点到以下城市的度数距离,即法戈、奥兰治和泽西城。但是下面的数据框中的每一列(例如“Fargo”)的行号为 0 到 3,由到任何点的最短 4 个距离填充,而对于其余 8 行,它会被填充,因为我们正在找出 4 个最短距离到另一个城市“橙色”等等。从下面的数据框中总结

Points = ['Point1','Point4','Point5','Point2','Point2','Point5','Point1','Point4','Point3','Point6','Point4','Point1']
Fargo = [2.90300755828,3.91961324034,21.9825588597,24.3141420303,24.3141420303,21.9825588597,2.90300755828,3.91961324034,25.3599772676,25.8509998739,3.91961324034,2.90300755828]
Orange = [25.5464458592,27.1527975618,6.17298387907,4.80214941294,4.80214941294,6.17298387907,25.5464458592,27.1527975618,46.4066249652,45.8853687976,27.1527975618,25.5464458592]
Jersey_City = [21.1030418227,19.6763385681,39.3194029761,41.8121131045,41.8121131045,39.3194029761,21.1030418227,19.6763385681,2.09632277264,2.67885042284,19.6763385681,21.1030418227]
toy_data=pd.DataFrame(index=Points,columns=['Fargo','Orange','Jersey_City'])
toy_data['Fargo']= Fargo
toy_data['Orange']=Orange
toy_data['Jersey_City']=Jersey_City

假设列 Fargo前 4 行:第 0 行到第 3 行表示距 Fargo 最短距离的点。同样在 Orange 列中第 4 行到第 7 行表示到 Orange 的距离最短的点。现在在第 4 行到第 7 行中,列 Fargo填充从最近的四个点到 Orange 的距离。但我想要一个框架,在一个数据框架中我可以得到到每个城市最短距离的 4 个点。那么您在 Fargo 列中看到的内容第 0-3 行是其最近的 4 个点,在 Orange 列中,第 4-7 行是其最近的 4 个点,位于 Jersey City 列中第 8-11 行是其最近的 4 个点。我想保留每个城市最近的 4 个点,并删除其余的点,如下所示。 我想要的是这样的:

Fargo = [2.9030075582789885,3.919613240342197,21.982558859743925,24.314142030334484,'NAN','NAN','NAN','NAN','NAN','NAN','NAN','NAN']
Orange = ['NAN','NAN','NAN','NAN',4.802149412942695,6.172983879065276,25.546445859236265,27.15279756182145,'NAN','NAN','NAN','NAN']
Jersey_City = ['NAN','NAN','NAN','NAN','NAN','NAN','NAN','NAN',2.096322772642856,2.67885042283533,19.676338568056806,21.10304182269932]
result_wanted_data =pd.DataFrame(index= Points,columns = ['Fargo','Orange','Jersey_City'])
result_wanted_data['Fargo']=Fargo
result_wanted_data['Orange']=Orange
result_wanted_data['Jersey_City']=Jersey_City

最佳答案

你能做的并不完全是我猜你想要的,但我认为这可以解决目的:

newdf=np.empty([12])

for i in range(12):
    newdf[i]=data.iloc[i,[(math.ceil((i+1)/4))]]
newdf1=[]
cities=list(data.columns.values[1:])
for i in range(12):
     newdf1.append(cities[(math.ceil((i+1)/4)-1)])
strs = ["" for x in range(12)]  
for i in range(12):

    strs[i]=data.iloc[i,0]

final_data=pd.DataFrame(columns=['city','point','distance' ])
final_data['city']=newdf1
final_data['distance']=newdf
final_data['point']=strs 

关于python - 将给定的 pandas 数据帧转换为另一个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320534/

相关文章:

python - 您如何使用 setup.cfg 正确限制 nosetests 中的 xcoverage 包覆盖范围?

pandas - DataFrame图上日期的x轴标签频率增加

python - 获取数据帧中最后一个值时出现 KeyError

R:如何访问数据帧元素中加载的数组成员

python - 正则表达式中的递归模式

python - 如何在 Pony ORM 中使用 SQL View

python - PyQt Designer 在哪里写代码?

python - 如何删除 Pandas 多级数据框中不需要的索引 header

python - 找出 pandas 数据框中事件的中间出现的 "0"和第一次出现的 '' 1"

Python pandas 创建不均匀的多索引