Python 基于多列操作数据
我的数据如下:Python 基于多列操作数据,python,pandas,Python,Pandas,我的数据如下: Unique_Number information complete_information 1 Hello Hello World 1 Hello 1 Wrong Info 2 R R,
Unique_Number information complete_information
1 Hello Hello World
1 Hello
1 Wrong Info
2 R R, Python
2
3 OverFlow Stackoverflow
4 Only info
我想实现的目标是:
如果唯一的\u编号相同(例如:所有1、所有2等),则应将完整的\u信息列的值粘贴到信息列中。
期望输出:
Unique_Number information complete_information
1 Hello World Hello World
1 Hello World
1 Hello World
2 R, Python R, Python
2 R, Python
3 Stackoverflow Stackoverflow
4 Only info
我想不出一个好的逻辑。我尝试循环所有唯一的\u编号,如果唯一的\u编号相同,则粘贴完整的\u信息值。。但是遇到了一个混乱的数据集 您可以使用:
df.information=np.where(df.complete_information.notna(),df.complete_information,
df.information)
df.information=df.groupby('Unique_Number')['information'].transform('first')
print(df)
(如果单元格是
complete\u information
中的空白字符串,则可能需要将其替换为np.nan
),或将df.complete\u information.notna()替换为np.where(…)
中的df.complete\u information.ne(“”)
中的基于掩码的ob移位值():
为什么3是stackoverflow,而不是overFlow如果一个唯一的_编号是相同的,这意味着什么?等同于。。?
Unique_Number information complete_information
0 1 Hello World Hello World
1 1 Hello World None
2 1 Hello World None
3 2 R, Python R, Python
4 2 R, Python None
5 3 Stackoverflow Stackoverflow
6 4 Only info None
In [723]: m = (df['Unique_Number'].shift(-1) == df['Unique_Number']) | (df['Unique_Number'] == df['Unique_Number'].shift(1))
In [724]: df.loc[m, 'information'] = df.loc[m, 'complete_information'].fillna(method='ffill')
In [725]: df
Out[725]:
Unique_Number information complete_information
0 1 Hello World Hello World
1 1 Hello World None
2 1 Hello World None
3 2 R, Python R, Python
4 2 R, Python None
5 3 OverFlow Stackoverflow
6 4 Only info None