python - 熊猫复制数据但旋转列
问题描述
我想转换这个 DF
地点 | 日期 | F1_ID | F1_名称 | F1_高度 | F1_状态 | F2_ID | F2_名称 | F2_高度 | F2_状态 |
---|---|---|---|---|---|---|---|---|---|
美国 | 19 年 12 月 31 日 | 1 | 乔恩 | 67 | W | 2 | 安东尼 | 68 | 大号 |
通过复制行但切换数据到这个 DF。
地点 | 日期 | F1_ID | F1_名称 | F1_高度 | F1_状态 | F2_ID | F2_名称 | F2_高度 | F2_状态 |
---|---|---|---|---|---|---|---|---|---|
美国 | 19 年 12 月 31 日 | 1 | 乔恩 | 67 | W | 2 | 安东尼 | 68 | 大号 |
美国 | 19 年 12 月 31 日 | 2 | 安东尼 | 68 | 大号 | 1 | 乔恩 | 67 | W |
我怎样才能在 Pandas 中实现这一点。我尝试创建 df 的副本并重命名列,但由于唯一索引而出现错误
解决方案
让我们尝试一个concat
和sort_index
:
import re
import pandas as pd
df = pd.DataFrame(
{'Location': {0: 'USA'}, 'Date': {0: '12/31/19'},
'F1_ID': {0: 1}, 'F1_Name': {0: 'Jon'}, 'F1_Height': {0: 67},
'F1_Status': {0: 'W'}, 'F2_ID': {0: 2},
'F2_Name': {0: 'Anthony'}, 'F2_Height': {0: 68},
'F2_Status': {0: 'L'}})
# Columns Not To Swap
keep_columns = ['Location', 'Date']
# Get F1 and F2 Column Names
f1_columns = list(filter(re.compile(r'F1_').search, df.columns))
f2_columns = list(filter(re.compile(r'F2_').search, df.columns))
# Create Inverse DataFrame
inverse_df = df[[*keep_columns, *f2_columns, *f1_columns]]
# Set Columns so they match df (prevents concat from un-inverting)
inverse_df.columns = df.columns
# Concat and sort index
new_df = pd.concat((df, inverse_df)).sort_index().reset_index(drop=True)
print(new_df.to_string())
源:
Location Date F1_ID F1_Name F1_Height F1_Status F2_ID F2_Name F2_Height F2_Status
0 USA 12/31/19 1 Jon 67 W 2 Anthony 68 L
输出:
Location Date F1_ID F1_Name F1_Height F1_Status F2_ID F2_Name F2_Height F2_Status
0 USA 12/31/19 1 Jon 67 W 2 Anthony 68 L
1 USA 12/31/19 2 Anthony 68 L 1 Jon 67 W
推荐阅读
- ruby-on-rails - 从 Milia 切换到 Apartment - 保留数据?
- powershell - PowerShell - 如何将内容添加到 CSV 文件中的特定单元格
- amazon-cognito - 如何正确存储 CognitoUser?
- java - 如何阅读 Discord 嵌入消息?(不和谐 Java JDA)
- python - Pandas:如何复制一行 n 次并在数据框的所需位置插入?
- python - Django Reverse 函数在此示例中不起作用
- c++ - 从指针访问地图的索引
- java - 安卓的预定通知
- ruby - 列“likes.id”必须出现在 GROUP BY 子句中或在聚合函数中使用
- rust - rust - 返回包含引用的结构