Python 将值从另一列移到另一列

Python 将值从另一列移到另一列,python,pandas,Python,Pandas,我是Python新手,面临以下问题: Rank NOC Gold Silver Bronze Total 0 1 United States (USA) 46 37 38 121 1 2 Argentina (ARG) 3 1 0 4 2 3 Denmark (DEN) 2 6 7 15 3 4 Sweden (SWE) 2 6 3 11 4 5 South Africa (RSA

我是Python新手,面临以下问题:

    Rank    NOC Gold    Silver  Bronze  Total
0   1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 Tajikistan (TJK)    1   0   0   1   NaN**
7   7   Malaysia (MAS)  0   4   1   5
    Rank    NOC Gold    Silver  Bronze  Total
[0  1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 6   Tajikistan (TJK)    1   0   0   1**
7   7   Malaysia (MAS)  0   4   1   5]
a) 如果总计在总计列中包含
NAN
,如何将值从秩右移到总计,并将值从秩右移到青铜色

    Rank    NOC Gold    Silver  Bronze  Total
0   1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 Tajikistan (TJK)    1   0   0   1   NaN**
7   7   Malaysia (MAS)  0   4   1   5
    Rank    NOC Gold    Silver  Bronze  Total
[0  1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 6   Tajikistan (TJK)    1   0   0   1**
7   7   Malaysia (MAS)  0   4   1   5]
b) 如何将缺少的秩值(在移位值之后)填充为从其上面的行派生的值

    Rank    NOC Gold    Silver  Bronze  Total
0   1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 Tajikistan (TJK)    1   0   0   1   NaN**
7   7   Malaysia (MAS)  0   4   1   5
    Rank    NOC Gold    Silver  Bronze  Total
[0  1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 6   Tajikistan (TJK)    1   0   0   1**
7   7   Malaysia (MAS)  0   4   1   5]
问题:

    Rank    NOC Gold    Silver  Bronze  Total
0   1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 Tajikistan (TJK)    1   0   0   1   NaN**
7   7   Malaysia (MAS)  0   4   1   5
    Rank    NOC Gold    Silver  Bronze  Total
[0  1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 6   Tajikistan (TJK)    1   0   0   1**
7   7   Malaysia (MAS)  0   4   1   5]
预期成果:

    Rank    NOC Gold    Silver  Bronze  Total
0   1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 Tajikistan (TJK)    1   0   0   1   NaN**
7   7   Malaysia (MAS)  0   4   1   5
    Rank    NOC Gold    Silver  Bronze  Total
[0  1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 6   Tajikistan (TJK)    1   0   0   1**
7   7   Malaysia (MAS)  0   4   1   5]

我会将金、银和铜相加(加上一些砝码,以确保金的数量大于任何数量的银等),然后您可以使用:

    Rank    NOC Gold    Silver  Bronze  Total
0   1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 Tajikistan (TJK)    1   0   0   1   NaN**
7   7   Malaysia (MAS)  0   4   1   5
    Rank    NOC Gold    Silver  Bronze  Total
[0  1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 6   Tajikistan (TJK)    1   0   0   1**
7   7   Malaysia (MAS)  0   4   1   5]

我会将金、银和铜相加(加上一些砝码,以确保金比任何数量的银都多),然后您可以使用:

    Rank    NOC Gold    Silver  Bronze  Total
0   1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 Tajikistan (TJK)    1   0   0   1   NaN**
7   7   Malaysia (MAS)  0   4   1   5
    Rank    NOC Gold    Silver  Bronze  Total
[0  1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 6   Tajikistan (TJK)    1   0   0   1**
7   7   Malaysia (MAS)  0   4   1   5]

我就是这样做的。它可以工作,但不确定它的优化程度。只要答案对我来说是正确的

    Rank    NOC Gold    Silver  Bronze  Total
0   1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 Tajikistan (TJK)    1   0   0   1   NaN**
7   7   Malaysia (MAS)  0   4   1   5
    Rank    NOC Gold    Silver  Bronze  Total
[0  1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 6   Tajikistan (TJK)    1   0   0   1**
7   7   Malaysia (MAS)  0   4   1   5]
from pandas import DataFrame, Series 
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
import re

# Step 1
# Cleanup values within NOC and Rank. Start off with changing the values within Total
# Replace the value of Total which is Null to NaN

df.loc[:, 'Total2'] = df['Total'].isnull()

# Step 2
# Filter Total equal to Nan and shift the row values from Rank to Total - Rank to Bronze

df.ix[df.Total2 == True, 'Total'] = df['Bronze']
df.ix[df.Total2 == True, 'Bronze'] = df['Silver']
df.ix[df.Total2 == True, 'Silver'] = df['Gold']
df.ix[df.Total2 == True, 'Gold'] = df['NOC']
df.ix[df.Total2 == True, 'NOC'] = df['Rank']

# Step 3
# Clean up the Rank column. Create a new column which reveal only digit value

df['Rank2'] = pd.to_numeric(df['Rank'], errors='coerce')
df['fill_forward'] = df['Rank2'].fillna(method='ffill')
del df['Rank']
del df['Rank2']
del df['Total2']
df = df.rename(columns={'fill_forward': 'Rank'})

我就是这样做的。它可以工作,但不确定它的优化程度。只要答案对我来说是正确的

    Rank    NOC Gold    Silver  Bronze  Total
0   1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 Tajikistan (TJK)    1   0   0   1   NaN**
7   7   Malaysia (MAS)  0   4   1   5
    Rank    NOC Gold    Silver  Bronze  Total
[0  1   United States (USA) 46  37  38  121
1   2   Argentina (ARG) 3   1   0   4
2   3   Denmark (DEN)   2   6   7   15
3   4   Sweden (SWE)    2   6   3   11
4   5   South Africa (RSA)  2   6   2   10
5   6   Sweden (SWE)    2   6   3   11
**6 6   Tajikistan (TJK)    1   0   0   1**
7   7   Malaysia (MAS)  0   4   1   5]
from pandas import DataFrame, Series 
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
import re

# Step 1
# Cleanup values within NOC and Rank. Start off with changing the values within Total
# Replace the value of Total which is Null to NaN

df.loc[:, 'Total2'] = df['Total'].isnull()

# Step 2
# Filter Total equal to Nan and shift the row values from Rank to Total - Rank to Bronze

df.ix[df.Total2 == True, 'Total'] = df['Bronze']
df.ix[df.Total2 == True, 'Bronze'] = df['Silver']
df.ix[df.Total2 == True, 'Silver'] = df['Gold']
df.ix[df.Total2 == True, 'Gold'] = df['NOC']
df.ix[df.Total2 == True, 'NOC'] = df['Rank']

# Step 3
# Clean up the Rank column. Create a new column which reveal only digit value

df['Rank2'] = pd.to_numeric(df['Rank'], errors='coerce')
df['fill_forward'] = df['Rank2'].fillna(method='ffill')
del df['Rank']
del df['Rank2']
del df['Total2']
df = df.rename(columns={'fill_forward': 'Rank'})

如果该数据为表格格式,则更容易阅读并增加有用答案的概率。如果该数据为表格格式,则更容易阅读并增加有用答案的概率。同意。但这并不能解决第二个问题,即“塔吉克斯坦”也应该与“瑞典”排名相同@KaSulaiman这是
method='first'
kwarg,你不需要选择赢家。如果你没有通过那个关卡,他们将在4.5平。i、 e.只需使用
.rank(升序=False)
即可。但这并不能解决第二个问题,即“塔吉克斯坦”也应该与“瑞典”排名相同@KaSulaiman这是
method='first'
kwarg,你不需要选择赢家。如果你没有通过那个关卡,他们将在4.5平。i、 e.只需使用
.rank(升序=False)