(新手) 問column中資料數值的對應問題(可看信件內容了解意思><)

78 views
Skip to first unread message

櫻夜玥

unread,
Nov 7, 2018, 10:45:53 PM11/7/18
to python.tw
若現在有兩個data A和B,兩個data中都有「C」和「D」這兩個column
但只有A的C和D有被定義,B的C有被定義,但D並沒有被定義數值
想問要如何寫出程式是可以將B的D column print出來的><?
(可看下面範例~)
同時想問若data A和B都不僅有兩個colum,但只有C和D的這兩個column要進行對應數值的動作,該如何寫出><?
謝謝您的耐心回答~

如:
date A
C column      D column
1                      123
2                      456
3                      789
4                      113
5                       446
......

date B
C column     D column
5                  全部皆未知
4
9
15
8
......






Dincht Wu

unread,
Nov 8, 2018, 1:59:16 AM11/8/18
to python.tw
不是很懂你的問題。

B的C有被定義,但D並沒有被定義數值
> 是指B的D是空值、Nan或None?

將B的D column print出來
> print(Bdata['Dcolumn])  < 就可以顯示B的D拉。不過沒什麼義意。都是空值、Nan或None。

若data A和B都不僅有兩個colum,但只有C和D的這兩個column要進行對應數值的動作
> 是指B的C如果是A的C,則B的D = A的D是這個意思嗎?

櫻夜玥

unread,
Nov 8, 2018, 4:14:16 AM11/8/18
to python.tw
您好,謝謝您回答我的問題 =)
我的問題是,想要求D的值,並把他print出來
換另一個例子來說好了
date A
C column       D column
(物件名稱)     (物件編號)   →  這排代表column中的標題
甲物件                 1
乙物件                 2
丙物件                 3 
丁物件                 4
戊物件                 5
......

date B
C column     D column
戊物件
丙物件
乙物件
丁物件
甲物件
......

由此想要將dataB的C column以dataA對應的方式來print出對應的數值
如print出來應該要是
date B
C column     D column
戊物件               5
丙物件               3
乙物件               2
丁物件               4
甲物件               1

Dincht Wu於 2018年11月8日星期四 UTC+8下午2時59分16秒寫道:

Zoom.Quiet

unread,
Nov 8, 2018, 6:30:50 AM11/8/18
to pyth...@googlegroups.com
是也乎,( ̄▽ ̄)
简单说, 就是 RMDB 中交叉查询的情景在 Python 中如何实现
用最简单暴力的逐一搜查就好:
比如
dataA = {'名称0': 值0,'名称2': 值1,,,}
dataB = {'名称0': None,'名称2': None,,,}

那么:
for b in dataB:
for a in dataA:
if b == a:
dataB[b] = dataA[a]

print('\n'.join([k\ndataB[k] for k in dataB]))

櫻夜玥 <miku...@gmail.com> 于2018年11月8日周四 下午5:14写道:
> --
> 這是 Google 網上論壇針對「python.tw」群組發送的訂閱通知郵件。
> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
> 如要在這個群組張貼留言,請傳送電子郵件到 pyth...@googlegroups.com
> 請前往以下網址造訪這個群組:https://groups.google.com/group/pythontw
> 如需更多選項,請前往:https://groups.google.com/d/optout



--
life is pathetic, go Pythonic! 人生苦短, Python当歌!
俺: http://zoomquiet.io
授: http://creativecommons.org/licenses/by-sa/2.5/cn/
怒: 冗余不做,日子甭过!备份不做,十恶不赦!
KM keep growing environment culture which promoting organization learning!

櫻夜玥

unread,
Nov 8, 2018, 6:53:01 AM11/8/18
to python.tw
但我真正的Data庫有幾萬筆資料要進行這樣的對應XD
所以逐一地尋找是不太可行的方法QQ

Zoom.Quiet於 2018年11月8日星期四 UTC+8下午7時30分50秒寫道:

Dincht Wu

unread,
Nov 8, 2018, 9:42:44 AM11/8/18
to python.tw
import pandas as pd
d1 = pd.DataFrame({1:[1, 2, 3], 2:[2, 3, 4]})
d2 = pd.DataFrame({1:[2, 3, 1], 2:[None,None,None]})
li = list(d2.index)
for a in range(0, len(li)):
    d2.loc[li[a], 2] = d1[d1[1]==d2.loc[li[a], 1]][2].values[0]
    
d2
12
023
134
212

這應該是你所說的結果吧。
如果要方析程式碼,以下這一行比較難懂一點:
d2.loc[li[a], 2] = d1[d1[1]==d2.loc[li[a], 1]][2].values[0]

可要拆分一下比較好懂:
如果 a = 0   li[a] = li[0] = 0 (index)
d2.loc[0, 2] = ... < 要指派資料到D2索引為0的2欄。
d1[d1[1]==d2.loc[01]][2].values[0]  < 再一次

.. d2.loc[01] == 2 < bj4
d1[d1[1]==2] < 篩選D1的1欄,值為D2的1欄的值2,指後回傳符合的資料表。結果如下
12
123

.. d1[d1[1]==2][2].values[0] > 如上結果取的[2]欄的.values,回傳是陣列,所以[0]取第一個值
Reply all
Reply to author
Forward
0 new messages