我有一个CSV文件,其中包含1000个相同df/table的版本(每个版本都来自不同的源),这些df/table都有Name和Age列。
data = [['11', 'Nick', '10', 'Dave', '4', 'Greg'], ['7', 'Nick', '10', 'Steve', '4', 'Jeff'],
['1', 'Brad', np.nan, 'Jim', '3', "jas"],['1','Steve', '2', 'Jack', np.nan,np.nan]]
# Create DataFrame
df = pd.DataFrame(data, columns=['Age','Name', 'Age', 'Name', 'Age', 'Name'])
# Print the output.
df
]
我想把这些数据做成如下所示的样子--把每个版本的Name + Age放在它前面一个版本的下面,这样我就把2000列变成了两列,或者在上面的例子中,把6列变成了2列。
***姓名和年龄标题位置不正确,但请忽略
有两个重要的警告
1.每个版本的姓名+年龄需要保持其唯一的顺序。
1.我不关心姓名和年龄都是NaN的情况,我也可以忽略姓名是NaN的情况。
我试过了
df = pd.concat([df["Name"].stack().reset_index(drop=True), df["Age"].stack().reset_index(drop=True)], axis=1, keys=["Name", "Age"])
然而,这把事情搞得一团糟,NaNs把我的结果搞砸了。我最终得到了这个
]
1条答案
按热度按时间dgsult0t1#
假设您可以在内存中执行该操作,则只需使用下面的1行代码重新调整数组并将其放回Pandas中:
这应该会得到你想要的 Dataframe