![](/img/trans.png)
[英]How set values in pandas dataframe based on NaN values of another column?
[英]How to set values in a Pandas DataFrame Column equal to values based on another DataFrame
我有两个 DataFrame - Final_df 和 Cust_LCK。 在 Final_df DataFrame 中,我有一列名为“Cust Group”的空白值和另一列具有唯一帐号 - “Acct #”(两个数据框之间的链接)。 另一个 DataFrame (Cust_LCK) 有一个标题为“Acct #”的列,其中包含唯一的帐号,而“Cust Group”则包含帐号所属的客户组。
如何填写 Final_df 与客户组的空白?
您可以使用从Cust_LCK
到Final_df
列的pandas.Series.map()
到 map 值。
import pandas as pd
df = pd.DataFrame({'A': [5, 6, 7, 8, 9], 'B': [1, 2, 3, 4, 5]})
Final_df = pd.DataFrame({
'Acct#' : range(0, 5),
})
Final_df['Cust Group'] = ''
Cust_LCK = pd.DataFrame({
'Acct#' : range(5, 0, -1),
'Cust Group': range(10, 15)
})
Final_df['Cust Group'] = Final_df['Acct#'].map(Cust_LCK.set_index('Acct#')['Cust Group'])
如果Cust_LCK
列的值有重复项,请仅使用pandas.DataFrame.drop_duplicates()保留其中一个:
Final_df['Cust Group'] = Final_df['Acct#'].map(Cust_LCK.drop_duplicates(subset['Acct#']).set_index('Acct#')['Cust Group'])
如果Cust_LCK
中的重复行具有不同的Cust Group
值,请将它们与pandas.DataFrame.merge()一起保存:
Final_df = Final_df.merge(Cust_LCK[['Acct#', 'Cust Group']], how='left', on=['Acct#']).drop('Cust Group_x', axis=1).rename(columns={'Cust Group_y': 'Cust Group'})
import pandas as pd
df = pd.DataFrame({'A': [5, 6, 7, 8, 9], 'B': [1, 2, 3, 4, 5]})
Final_df = pd.DataFrame({
'Acct#' : range(0, 5),
})
Final_df['Cust Group'] = ''
print(Final_df)
'''
Acct# Cust Group
0 0
1 1
2 2
3 3
4 4
'''
Cust_LCK = pd.DataFrame({
'Acct#' : [4, 4, 3, 2, 1],
'Cust Group': range(10, 15)
})
Cust_LCK['Group'] = ''
print(Cust_LCK)
'''
Acct# Cust Group Group
0 4 10
1 4 11
2 3 12
3 2 13
4 1 14
'''
Final_df = Final_df.merge(Cust_LCK[['Acct#', 'Cust Group']], how='left', on=['Acct#']).drop('Cust Group_x', axis=1).rename(columns={'Cust Group_y': 'Cust Group'})
print(Final_df)
'''
Acct# Cust Group
0 0 NaN
1 1 14.0
2 2 13.0
3 3 12.0
4 4 10.0
5 4 11.0
'''
如果您不想在合并后删除和重命名列。 合并前删除Final_df
的Cust Group
列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.