Python 将列名作为具有相同列值的新列获取
我的数据框架与此类似:Python 将列名作为具有相同列值的新列获取,python,pandas,calculated-columns,Python,Pandas,Calculated Columns,我的数据框架与此类似: name hobby date country 5 10 15 20 ... Toby Guitar 2020-01-19 Brazil 0.1245 0.2543 0.7763 0.2264 Linda Cooking 2020-03-05 Italy 0.5411 0.2213 Na
name hobby date country 5 10 15 20 ...
Toby Guitar 2020-01-19 Brazil 0.1245 0.2543 0.7763 0.2264
Linda Cooking 2020-03-05 Italy 0.5411 0.2213 Nan 0.3342
Ben Diving 2020-04-02 USA 0.8843 0.2333 0.4486 0.2122
...
我想复制int列,复制它们,并将int作为列的新值,如下所示:
name hobby date country 5 5 10 10 15 15 20 20...
Toby Guitar 2020-01-19 Brazil 0.1245 5 0.2543 10 0.7763 15 0.2264 20
Linda Cooking 2020-03-05 Italy 0.5411 5 0.2213 10 Nan 15 0.3342 20
Ben Diving 2020-04-02 USA 0.8843 5 0.2333 10 0.4486 15 0.2122 20
...
我不知道如何解决这个问题并寻找想法这是一个你可以尝试的解决方案
digits_ = pd.DataFrame(
{col: [int(col)] * len(df) for col in df.columns if col.isdigit()}
)
pd.concat([df, digits_], axis=1)
我不确定这是否是用重复的列名组织数据的最佳方式。我建议将其堆叠(融化)成长格式
df.melt(id_vars=["name", "hobby", "date", "country"])
结果
name hobby date country variable value
0 Toby Guitar 2020-01-19 Brazil 5 0.1245
1 Linda Cooking 2020-03-05 Italy 5 0.5411
2 Ben Diving 2020-04-02 USA 5 0.8843
3 Toby Guitar 2020-01-19 Brazil 10 0.2543
4 Linda Cooking 2020-03-05 Italy 10 0.2213
5 Ben Diving 2020-04-02 USA 10 0.2333
6 Toby Guitar 2020-01-19 Brazil 15 0.7763
7 Linda Cooking 2020-03-05 Italy 15 Nan
8 Ben Diving 2020-04-02 USA 15 0.4486
9 Toby Guitar 2020-01-19 Brazil 20 0.2264
10 Linda Cooking 2020-03-05 Italy 20 0.3342
11 Ben Diving 2020-04-02 USA 20 0.2122
以下是另一个带有和的选项:
dupes={f'{col}}:如果col.isdigit()},df.columns中col的int(col)
df=df.assign(**重复)。重命名(列=重复)
#姓名爱好日期国家5 10 15 20 5 10 15 20
#0托比吉他2020-01-19巴西0.12450.2543 0.7763 0.2264 5 10 15 20
#1 Linda Cooking 2020-03-05意大利0.5411 0.2213 Nan 0.3342 5 10 15 20
#2本潜水2020-04-02美国0.8843 0.2333 0.4486 0.2122 5 10 15 20
如果希望复制列位于原始列旁边,请包括:
dupes={f'{col}}:如果col.isdigit()},df.columns中col的int(col)
df=df.assign(**重复)
df=df.reindex(反转(排序(df.columns)),轴=1)。重命名(columns=dupes)
#姓名爱好日期国家5 5 20 15 10 10
#0托比吉他2020-01-19巴西5 0.1245 20 0.2264 15 0.7763 10 0.2543
#1 Linda Cooking 2020-03-05意大利5 0.5411 20 0.3342 15南10 0.2213
#2本潜水2020-04-02美国5 0.8843 20 0.2122 15 0.4486 10 0.2333
您可以将pandas插入(…)功能与for循环结合使用
将numpy导入为np
作为pd进口熊猫
df=pd.数据帧([['Toby','Guitar','2020-01-19','Brazil',0.1245,0.2543,0.7763,0.2264],
[Linda',Cooking',2020-03-05',Italy',0.5411,0.2213,np.nan,0.3342],
[本”,“潜水”,“2020-04-02”,“美国”,0.8843,0.2333,0.4486,0.2122],
列=[‘姓名’、‘爱好’、‘日期’、‘国家’、5、10、5、20])
start_col=4
对于范围内的i(0,长度(测向列)-起始列):
dcol=df.columns[start_col+i*2]#要复制的数字col名称
插入(起始列+i*2+1,dcol,[dcol]*len(df.index),True)
结果:
name hobby date country 5 ... 10 5 5 20 20
0 Toby Guitar 2020-01-19 Brazil 0.1245 ... 10 0.7763 5 0.2264 20
1 Linda Cooking 2020-03-05 Italy 0.5411 ... 10 NaN 5 0.3342 20
2 Ben Diving 2020-04-02 USA 0.8843 ... 10 0.4486 5 0.2122 20
[3 rows x 12 columns]
我假设您的所有列都是从第5位开始的数字,但如果不是,您可以在for循环中添加if条件以防止出现这种情况:
start\u col=4
对于范围内的i(0,长度(测向列)-起始列):
dcol=df.columns[start_col+i*2]#要复制的数字col名称
如果类型(dcol)为int:
插入(起始列+i*2+1,dcol,[dcol]*len(df.index),True)
检查列是否可以强制转换为整数变量。如果是,则创建一个值等于整数的新列。
name hobby date country 5 ... 10 5 5 20 20
0 Toby Guitar 2020-01-19 Brazil 0.1245 ... 10 0.7763 5 0.2264 20
1 Linda Cooking 2020-03-05 Italy 0.5411 ... 10 NaN 5 0.3342 20
2 Ben Diving 2020-04-02 USA 0.8843 ... 10 0.4486 5 0.2122 20
[3 rows x 12 columns]