![](/img/trans.png)
[英]Operations on only some values of a column filtered by ANOTHER COLUMN in a dataframe
[英]Setting the values of filtered rows of dataframe equal to the column of another dataframe
我有一個數據df1
:
df1 = pd.DataFrame([['a','Yes','abc def msg1'],
['b', 'No', 'ghi jkl msg2'],
['c','Yes','mno pqr msg3'],
['d', 'No', 'stu vwx msg4'],
['a', 'Yes', 'bcd efg msg5'],
['c','No','hij klm msg6'],
['a','No','nop qrs msg7'],
['b','No','tuv wxy msg8']],
columns=['unit_name','is_required','dummy_column'])
unit_name is_required dummy_column
a Yes abc def msg1
b No ghi jkl msg2
c Yes mno pqr msg3
d No stu vwx msg4
a Yes bcd efg msg5
c No hij klm msg6
a No nop qrs msg7
b No tuv wxy msg8
具有 unit_name = 'a' 和 is_required='Yes' 的行用於派生另一個數據幀df2
:
dummy1 dummy2 msg_column value
abc def msg1 val1
bcd efg msg5 val2
現在我想將df2
的值列添加到df1
。 沒有值的行必須包含“-”。 所以我想要的預期輸出是:
unit_name is_required dummy_column value
a Yes abc def msg1 val1
b No ghi jkl msg2 -
c Yes mno pqr msg3 -
d No stu vwx msg4 -
a Yes bcd efg msg5 val2
c No hij klm msg6 -
a No nop qrs msg7 -
b No tuv wxy msg8 -
為了做到這一點,我嘗試了以下代碼行:
df1.loc[(df1.unit_name=='a') & (df1.is_required=='Yes'),'value'] = df2['value']
df1.fillna('-')
但我得到了結果:
unit_name is_required dummy_column value
a Yes abc def msg1 val1
b No ghi jkl msg2 -
c Yes mno pqr msg3 -
d No stu vwx msg4 -
a Yes bcd efg msg5 -
c No hij klm msg6 -
a No nop qrs msg7 -
b No tuv wxy msg8 -
現在我明白這是因為在等同於兩列時,LHS 的索引值將用於從 RHS 獲取值。
我如何獲得我需要的輸出? 歡迎任何想法。 提前致謝!
問題是兩個 DataFrame 中有不同的索引。
如果過濾的行數與df2
行數相同,則可能的解決方案:
print (((df1.unit_name=='a') & (df1.is_required=='Yes')).sum(), len(df2.index))
然后是可能的用途:
df1.loc[(df1.unit_name=='a') & (df1.is_required=='Yes'),'value'] = df2['value'].to_numpy()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.