python - 复制熊猫数据框中的行和列
问题描述
我想在具有 36 列和 28 行的 pandas DataFrame 中多次(30 次)扩展和复制行和列。因此结果应该是一个 1.080 x 840 的矩阵。
例子:
ARG BRA BRN
AUS 2.93 3.06 3.56
AUT 5.36 5.47 2.14
BEL 5.36 5.47 2.14
结果应该是:
ARG ARG BRA BRA BRN BRN
AUS 2.93 2.93 3.06 3.06 3.56 3.56
AUS 2.93 2.93 3.06 3.06 3.56 3.56
AUT 5.36 5.36 5.47 5.47 2.14 2.14
AUT 5.36 5.36 5.47 5.47 2.14 2.14
BEL 5.36 5.36 5.47 5.47 2.14 2.14
BEL 5.36 5.36 5.47 5.47 2.14 2.14
有没有一种简单的方法可以做到这一点?先感谢您!
解决方案
可以通过Index.repeat
和DataFrame.loc
:
N = 2
df = df.loc[df.index.repeat(N), df.columns.repeat(N)]
print (df)
ARG ARG BRA BRA BRN BRN
AUS 2.93 2.93 3.06 3.06 3.56 3.56
AUS 2.93 2.93 3.06 3.06 3.56 3.56
AUT 5.36 5.36 5.47 5.47 2.14 2.14
AUT 5.36 5.36 5.47 5.47 2.14 2.14
BEL 5.36 5.36 5.47 5.47 2.14 2.14
BEL 5.36 5.36 5.47 5.47 2.14 2.14
但是然后得到重复的列名,所以通过名称查找是有问题的:
print (df['ARG'])
ARG ARG
AUS 2.93 2.93
AUS 2.93 2.93
AUT 5.36 5.36
AUT 5.36 5.36
BEL 5.36 5.36
为防止可能重复列名:
df.columns = [f'{a}_{b+1}' for a, b in zip(df.columns, np.arange(df.shape[1]) % N)]
print (df)
ARG_1 ARG_2 BRA_1 BRA_2 BRN_1 BRN_2
AUS 2.93 2.93 3.06 3.06 3.56 3.56
AUS 2.93 2.93 3.06 3.06 3.56 3.56
AUT 5.36 5.36 5.47 5.47 2.14 2.14
AUT 5.36 5.36 5.47 5.47 2.14 2.14
BEL 5.36 5.36 5.47 5.47 2.14 2.14
BEL 5.36 5.36 5.47 5.47 2.14 2.14
推荐阅读
- css - 增加图标的大小而不增加同一按钮内的文本大小>(文本+图标)>仅增加图标
- r - 如何在 R 中对 .csv 文件进行排序
- javascript - 使用 * 选择器为所有元素切换 CSS 转换按钮
- c++ - 如何在 While 循环中打印出矩阵格式的二维数组
- xamarin - 无法将 Custom.targets 文件添加到启用 Proguard 的 Xamarin Android 项目
- matlab - 如何在给定拟合参数的 MATLAB 中绘制余弦波?
- python-3.x - Asyncio 测试一个使用 loop.call_soon_threadsafe 的函数
- android - 为什么使用 mapview 看不到 android 小吃吧?
- php - 有什么方法可以更改类变量,这会影响之后创建的所有实例?
- javascript - 自动从 react js 页面重定向到移动应用