【问题标题】:Move certain pandas dataframe column values from one column to another and replace old position with Nan将某些 pandas 数据框列值从一列移动到另一列,并用 Nan 替换旧位置
【发布时间】:2020-11-29 15:26:40
【问题描述】:

我有一个这样的数据框:

data = {"Name": ["Jason", "Jason", "Jason", "Jason", "Pat", "Amy", "Amy"]}
df = pd.DataFrame(data)

    Name
0  Jason
1  Jason
2  Jason
3  Jason
4    Pat
5    Amy
6    Amy

我需要它看起来像这样:

    Name Name2 Name3
0  Jason   Nan   Nan
1  Jason   Nan   Nan
2  Jason   Nan   Nan
3  Jason   Nan   Nan
4    Nan   Pat   Nan
5    Nan   Nan   Amy
6    Nan   Nan   Amy

我可以按照我想要的方向手动创建一些东西,但不确定如何通过在“名称”列中找到的唯一值的计数来自动创建新列。我还需要新列中的值位于同一行索引上。我发现列表也总是会发生变化,所以使用 'unique_names[0]' 并不总是有效。这是我到目前为止尝试过但卡住的方法。此外,这只是一列的示例,但实际上会有大约 17 个具有不同值的类似列。谢谢

unique_names = list(set([p for p in df["Name"]]))
# ['Pat', 'Jason', 'Amy']

count = len(unique_names)    # Trying to fit this somewhere to give it a count to refer to
# 3

for item in df["name"]:
if unique_names[0] == item:
    df["new_name"] = pd.Series(item)


    Name New_name
0  Jason      Pat
1  Jason      NaN
2  Jason      NaN
3  Jason      NaN
4    Pat      NaN
5    Amy      NaN
6    Amy      NaN

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我们可以先str.get_dummies 然后mul

    s=df.Name.str.get_dummies().mul(df.Name,axis=0).replace('',np.nan)
    s
    Out[54]: 
       Amy  Jason  Pat
    0  NaN  Jason  NaN
    1  NaN  Jason  NaN
    2  NaN  Jason  NaN
    3  NaN  Jason  NaN
    4  NaN    NaN  Pat
    5  Amy    NaN  NaN
    6  Amy    NaN  NaN
    

    【讨论】:

    • 谢谢@BEN_YO!棒极了。这是否也适用于第一个值几乎相同的元组对列表,类似于我的示例数据框中的名称,但第二个值不同?像 [(Amy, 1), (Amy, 2), (Jason, 1), (Jason, 2)....]
    猜你喜欢
    • 2021-09-24
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2021-09-23
    • 2022-01-22
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    相关资源
    最近更新 更多