Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并:在特定位置插入列_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 合并:在特定位置插入列

Python 合并:在特定位置插入列,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有两个数据帧: df_a ["user", "name", "zip", "city"] df_b ["user", "gender", "country"] 我在user列中加入这两个数据帧- final_df = pd.merge(df_a, df_b, on='user', how='left') # column order --> ["user", "name", "zip", "city", "gender", "country"] 但是,我希望列的顺序如下- [“用户”

我有两个数据帧:

df_a ["user", "name", "zip", "city"]
df_b ["user", "gender", "country"]
我在
user
列中加入这两个数据帧-

final_df = pd.merge(df_a, df_b, on='user', how='left')
# column order --> ["user", "name", "zip", "city", "gender", "country"]
但是,我希望列的顺序如下-

[“用户”、“姓名”、“性别”、“国家”、“邮政编码”、“城市”]

除了通常的重新订购,比如

my_ordering = ["user", "name", "gender", "country", "zip", "city"]
final_df = final_df[my_ordering]
…获得我想要的排序的最佳方式是什么(考虑到一个数据帧中可能有1000个这样的列)?

您可以:

列列表=列表(最终列)
#现在按您希望的方式重新排列列表
#那就做吧
final_df=final_df[列列表]

这就是我目前处理此案的方式-

all_columns = df_a.values.tolist()

# Joining the dataframes
final_df = pd.merge(df_a, df_b, on='user', how='left')
# column order --> ["user", "name", "zip", "city", "gender", "country"]

# Re-arranging columns
for column in all_columns:
    if columns == "name":
        all_columns[all_columns.index(column) + 1:all_columns.index(column) + 1] = ["gender", "country"]
        break

# Assigning re-arranged columns
final_df = final_df[all_columns]
# column order --> ["user", "name", "gender", "country", "zip", "city"]
很高兴知道人们是否有其他有效的较短的方法来重新排序本专栏。

我会这样做:

如果合并后数据帧df为100列

存储要放置在列表开头的列

first_cols=['a','z',b','c','g']

将剩余列添加到此列表中

req\u order=first\u cols+[如果col不在first\u cols中,则为df.columns中的col设置col]

然后使用该自定义顺序:

df=df.reindex(columns=req\u order)

您也可以这样重新订购:


df=df[req\u order]

合并后您是否尝试过使用Reorder@如果你有1000个列,AryanJain不是最好的答案。我遇到的一个用例涉及到需要保持两组列分开(一组包含目标、时间戳和ID,另一组包含合法的预测值)。但从未发现需要保留精确列索引的用例。。。这几乎就像在联接操作后希望db记录保留它们的排序顺序一样……是否有用于排列列的规则?如果您想要排列它们的方式没有遵循任何特定规则,那么我看到的唯一方法是手动重新排列它们。您的答案已出现在此处:。此外,如果您想在开始时移动40列,您仍然需要全部键入。